[理论]柯里化对函数式编程有何意义?

柯里化对函数式编程有何意义? - 编程语言 - 知乎
https://www.zhihu.com/question/20037482

//
你写 scheme 的话,下面这样是很恶心的。
(map (lambda (x) (* 2 x)) '(1 2 3))
看人家有自动柯里化的就,简单了
map (2 *) [1,2,3]
所以,以scheme的观点来看,就是少写多少lambda呀。
宏不是号称让程序写程序吗!
你看人家这个才是真正的让程序写程序呢。

//
参考Scala高阶函数的语法糖// 没使用语法糖的 sum 函数 def sum(f: Int => Int): (Int, Int): Int = { def sumF(a: Int, b: Int): Int = if (a > b) 0 else f(a) + sumF(a + 1, b) sumF } // 使用语法糖后的 sum 函数 def sum(f: Int => Int)(a: Int, b: Int): Int = if (a > b) 0 else f(a) + sum(f)(a + 1, b)

把原来的 sum函数转化成这样的形式,好处在哪里?答案是我们获得了更多的可能性,比如刚开始求和的上下限还没确定,我们可以在程序中把一个函数传给 sum,sum(fact)完全是一个合法的表达式,待后续上下限确定下来时,再把另外两个参数传进来。对于 sum 函数,我们还可以更进一步,把 a,b 参数再转化一下,这样 sum 函数就变成了这样一个函数:它每次只能接收一个参数,然后返回另一个接收一个参数的函数,调用后,又返回一个只接收一个参数的函数。这就是传说中的柯里化,多么完美的形式!在现实世界中,的确有这样一门函数式编程语言,那就是 Haskell,在 Haskell 中,所有的函数都是柯里化的,即所有的函数只接收一个参数!


柯里化与偏应用(JavaScript描述) | Ji ZHANG's Blog
http://shzhangji.com/blog/2013/03/07/currying-and-partial-application/

你可能感兴趣的:([理论]柯里化对函数式编程有何意义?)