我们通常写代码是这样写的:
add2 x = x + 2
mySum xs = foldr (+) 0 xs但 partial function 为我们提供了一个简写的方法
例如:
add2 = (+2)
mySum = foldr (+) 0
上面的 "(+2)" 和 "foldr (+) 0" 就是 partial function
Prelude> let add2 = (+2)
Prelude> let mySum = foldr (+) 0
Prelude> :t add2
add2 :: Integer -> Integer
Prelude> :t mySum
mySum :: [Integer] -> Integer
Prelude> :t (+2)
(+2) :: (Num a) => a -> a
Prelude> :t foldr (+) 0
foldr (+) 0 :: (Num a) => [a] -> a
这里的 (+2) 很特殊,也可以写为 (2+)
原来一直以为只有 + - * / ^ 等这几个运算符可以这样,没想到下面也可以
可以试试这一个:
eachBy = (`map` [1, 2, 3, 4])
addEach2To = ((+2) `map`)Prelude> let eachBy = (`map` [1, 2, 3, 4])Prelude> let addEach2To = ((+2) `map`)Prelude> eachBy (+2)[3,4,5,6]Prelude> addEach2To [1, 2, 3, 4][3,4,5,6]
阅读(972) | 评论(0) | 转发(0) |