[FP] Currying的意義

SC Tuan
2 min readFeb 4, 2018

--

參考

在數學裡面有針對擁有多個參數的函數進行分析的需求,一般來說,參數越多,越不容易進行分析,所以我們必須將這個艱難的情況進行簡化,Gottlob Frege證明了對單一參數的函數進行分析已經足夠了,因此,僅需要將多參數轉化成單一參數的狀態進行分析即可。將多參數函數簡化成單一參數函數的方法就叫做單一參數函數的方法就叫做Currying。

會取為Currying就是因為這個方法的概念的建立者叫做Haskell Curry

用簡單的概念來解釋這個方法的話,就是你僅改變一個參數,另一個參數固定的話,就是一個映射的結果。

比方說,f(x, y) = x + 2y,假設x = 1,那就是f(1, y) = 1 + 2y。如果x = 10,那就是f(10, y) = 10 + 2y。

f(1, y)和f(10, y)可以看成是一個新的函數g(x)在x=1和x=10的結果:

g: R -> (R->R)

R是實數的集合,R->R是所有參數是實數,值也是實數的函數的集合。

連帶著這個新的知識,順便學一點很潮的名詞吧。

Arity

這指的是一個函數的參數的數目(link)。

First-class function

當我們說一個程式語言有first-class function,指的是該程式語言可以把函數當成參數一樣處理,可以傳入函數、作為函數回傳值、儲存在變數中等等。(link)

Higher-order function

就是一個函數,只是他要碼是把函數作為參數輸入(至少一個),要碼是把函數作為回傳值傳出去,亦或兩者皆有。簡單的說,一個函數它吃的是函數,或是吐的是函數,或是他吃的吐的都是函數,那他就是高階的函數(higher-order)(link)。

就好像海裡面的鯊魚,吃的是其他的魚,那他就是魚裡面高階的捕食者。

Defunctionalization

指的是在編譯期間會把higher-order function轉化成單一個first-order function的動作。(link)

舉個粗淺的例子,就好像把文言文改寫成白話文一樣。

--

--

SC Tuan
SC Tuan

Written by SC Tuan

iOS developer(Obj-C & Swift) / Web developer (Java, Javascript, CSS,HTML)

No responses yet