2012-10-16 47 views
3

有人可以請解釋給我捲曲的概念。我主要是在學習它,因爲我們在我的'現代編程語言'類中學習了ML以用於函數式語言介紹。ML功能柯里爾

特別是你可以用這個例子:

-fun g a = fn b => a+b; 
     val g = fn: int -> int -> int 
    -g 2 3; 
     val it = 5 : int 

我很困惑如何將這些參數傳遞或如何別想它擺在首位。

謝謝你的幫助。

回答

4

在這種情況下,您將顯式地進行柯里化,因此應該更易於理解。

如果我們閱讀函數定義,它說(釋義):「創建一個函數g,當給定的a返回fn b => a+b。」

也就是說,如果我們撥打g 2,我們取回功能fn b => 2+b。因此,當我們撥打g 2 3時,我們實際上撥打(g 2) 3;那就是我們首先得到上面說明的函數,然後在值3上使用這個函數,產生5

柯里格只是在幾個「階段」中製作一個功能的概念,每個階段都需要一個輸入併產生一個新功能。 SML具有用於此語法糖,使得g等效於以下語句:

fun g a b = a + b; 
+0

完全拼寫出的版本是這樣的:'VAL克= FN一個=> FN B => A + B'。我覺得這很有用,因爲它表明函數是值,對'fun'關鍵字沒有特殊的魔力。 – waldrumpus

+0

@waldrumpus:實際上,'fun'是'val rec'的語法糖,而不是'val',雖然在這種情況下並不重要。 :) –

+0

'環境'(我正在使用SML/NJ)如何知道fn是什麼?b => a + b在這種情況下知道什麼是?那不是一個沒有約束的變數。也許混淆是我閱讀的方式;我應該從左到右還是從右到左閱讀? – Nick