FP学习之一

最近开始学习函数式编程,目的是学习一种新的思路,不是形而上学的为纯函数而函数。
谈谈 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]

你可能感兴趣的:(FP学习之一)