Scala柯里化和反柯里化

2021-07-26 19:58:57 字數 772 閱讀 6767

名詞解釋

在電腦科學中,柯里化(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中可以定義乙個函式 1.柯里化,注意cookfood與cookfood1 cookfood2是同乙個方法,但是引數展示的形式被分開,這就是柯里化。def cookfood potato string,tomato string,cook string unit unit def cookf...