- 论坛徽章:
- 0
|
我们通常写代码是这样写的:
- add2 x = x + 2
- mySum xs = foldr (+) 0 xs
复制代码
但 partial function 为我们提供了一个简写的方法
例如:
- add2 = (+2)
- mySum = foldr (+) 0
复制代码
上面的 "(+2)" 和 "foldr (+) 0" 就是 partial function
- Main> :t add2
- add2 :: Integer -> Integer
- Main> :t mySum
- mySum :: [Integer] -> Integer
- Main> :t (+2)
- flip (+) 2 :: Num a => a -> a
- Main> :t foldr (+) 0
- foldr (+) 0 :: Num a => [a] -> a
复制代码
这里的 (+2) 很特殊,也可以写为 (2+)
原来一直以为只有 + - * / ^ 等这几个运算符可以这样,没想到下面也可以
可以试试这一个:
- eachBy = (`map` [1, 2, 3, 4])
- addEach2To = ((+2) `map`)
复制代码
- Main> eachBy (+2)
- [3,4,5,6]
- Main> addEach2To [1, 2, 3, 4]
- [3,4,5,6]
复制代码
infix 函数 partial function 有两种形式,一种与第一个参数结合,另一种是与与第二个参数结合
[ 本帖最后由 izhier 于 2009-4-2 16:02 编辑 ] |
|