Function Currying

函數柯理化,很多人覺得很難理解。其實難就難在它的翻譯并不恰當。如果翻譯成

部分綁定函數

含義是不是一目了然?學過C++,用過 STL std::bind函數的同學應該對這個翻譯感到很親切:這不就是名義上只接受部分參數,但其實底下偷偷補足其他參數的做法嗎?

比如下面這個JS版的bind函數,它可以綁定函數的第一個參數(預先指定一個實參),從而生成一個新的函數:

var bind = function(fn, a){
    return function(b){
        return fn(a, b)
    }
}
var mult = function(a, b){
    return a*b
}

// 綁定mult的第一個參數a,譬如指定該參數為2
var time2 = bind(mult, 2)

// 調用新函數time2
time(1) // 得2
time(3) // 得6

當然,嚴謹一點來說,currying之后的函數只接受一個參數,這比一般的部分綁定函數形式上更加精煉。

之所以這種函數處理方式叫做currying,是源自美國的數學家兼邏輯學家,Haskell Curry。雖然不是他發明的,但是卻是這種方式的發揚者。
最初由Gottlob Frege提出,經 Moses Sch?nfinkel發展,最終 Haskell Curry集其大成。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容