柯里化對函數(shù)式編程有何意義? - 編程語言 - 知乎
https://www.zhihu.com/question/20037482
//
你寫 scheme 的話违施,下面這樣是很惡心的。
(map (lambda (x) (* 2 x)) '(1 2 3))
看人家有自動柯里化的就瑟幕,簡單了
map (2 *) [1,2,3]
所以磕蒲,以scheme的觀點來看留潦,就是少寫多少lambda呀。
宏不是號稱讓程序?qū)懗绦騿幔?br>
你看人家這個才是真正的讓程序?qū)懗绦蚰亍?/p>
//
參考Scala高階函數(shù)的語法糖// 沒使用語法糖的 sum 函數(shù) 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 函數(shù) def sum(f: Int => Int)(a: Int, b: Int): Int = if (a > b) 0 else f(a) + sum(f)(a + 1, b)
把原來的 sum函數(shù)轉(zhuǎn)化成這樣的形式辣往,好處在哪里兔院?答案是我們獲得了更多的可能性,比如剛開始求和的上下限還沒確定站削,我們可以在程序中把一個函數(shù)傳給 sum坊萝,sum(fact)完全是一個合法的表達式,待后續(xù)上下限確定下來時许起,再把另外兩個參數(shù)傳進來十偶。對于 sum 函數(shù),我們還可以更進一步园细,把 a惦积,b 參數(shù)再轉(zhuǎn)化一下,這樣 sum 函數(shù)就變成了這樣一個函數(shù):它每次只能接收一個參數(shù)猛频,然后返回另一個接收一個參數(shù)的函數(shù)狮崩,調(diào)用后,又返回一個只接收一個參數(shù)的函數(shù)鹿寻。這就是傳說中的柯里化睦柴,多么完美的形式!在現(xiàn)實世界中毡熏,的確有這樣一門函數(shù)式編程語言坦敌,那就是 Haskell,在 Haskell 中招刹,所有的函數(shù)都是柯里化的恬试,即所有的函數(shù)只接收一個參數(shù)!
柯里化與偏應(yīng)用(JavaScript描述) | Ji ZHANG's Blog
http://shzhangji.com/blog/2013/03/07/currying-and-partial-application/