最近开始学习函数式编程,目的是学习一种新的思路,不是形而上学的为纯函数而函数。
谈谈 Currying (Haskell Curry)
这个比较好玩,Haskell定义一个2个参数的函数
let f x y = x + y
但你可以这样用它
map (f 2) [1, 2, 3, 4, 5]
Currying 其实就是用“单参数”的函数,来模拟多参数的函数,(f 2) 返回的是一个匿名函数,它会把 2 加到自己的参数上面返回。
如果你偏不要这样投机取巧,那就只能这样,(匿名函数Lambda在Haskell里用\表示)
map (\y->f 2 y) [1, 2, 3, 4, 5]
如果是除法呢,还想省个参数?
let f x y = x / y
只能交换2个参数位置才可以了,有点绕
map (flip f 2) [1, 2, 3, 4, 5]
还是直接的简单
map (\y->f y 2) [1, 2, 3, 4, 5]