名詞解釋
在計算機科學中,柯里化(Currying)是把接受多個參數的函數變換成接受一個單一參數(最初函數的第一個參數)的函數,並且返回接受餘下的參數且返回結果的新函數的技術。柯里化舉例說明
def curry1[A, B, C](a: A, f: (A, B) => C): B => C = (b: B) => f(a, b)
這個函數的結果是一個高階函數接收一個帶有兩個參數的函數,進行部分應用。即我們有一個A和一個需要A和B產生C的函數,可以得到一個只需要B就可以產生C的函數(因爲我們已經有A了)。就像我拿一個胡蘿蔔換你一個蘋果和香蕉,你已經給了我一個蘋果,只用再給我一個香蕉就可以換胡蘿蔔了。
再看一個柯里化的例子,把帶有兩個參數的函數f轉換爲只有一個參數的部分應用函數f。
def curry[A, B, C](f: (A, B) => C): A => (B => C) = (a: A) => ((b: B) => f(a, b))
反柯里化舉例
實現反柯里化與柯里化正好相反。注意,Scala中的右箭頭=>是右結合的, A=>(B=>C)可以寫爲A => B => C
def uncurry[A, B, C](f: A=>B=>C): (A, B) => C = (a: A, b:B) => f(a)(b)
參考資料
- Scala函數式編程
Scala柯里化和反柯里化
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.