2013-03-22 70 views
1

嗨可能有人請解釋爲什麼類型如下所述?我知道他們必須是int,因爲x+y+z但是參數的數量(即->)對我來說似乎是任意的。Ocaml:爲什麼這些類型?

let f x y z = x+y+z in f 1 2 3  // int 
let f x y z = x+y+z in f 1 2  // int -> int 
let f x y z = x+y+z in f   // int -> int -> int -> int 

謝謝!

回答

2

在valtron的答案上略微擴大。一旦你瞭解了f的類型,這一切都很簡單。正如瓦龍特所說,它的類型是int -> int -> int -> int。基本上,這是一個函數的類型,它需要一個int並返回int -> int -> int類型的函數。所以如果你只是通過1f(你沒有在你的例子中做),你會得到一些類型int -> int -> int

以類似的方式,如果將int傳遞給此返回的函數,則會返回類型爲int -> int的函數。這是你在你的例子中做的事情:f 1 2確實如此:它通過1f,然後將2傳遞給f返回的函數。第二個函數調用 返回int -> int類型的東西,如頂層顯示的那樣。

以相同的方式,在f之後指定三個值返回int類型的值。這是你的第一個例子中發生的事情。

1

您定義的f的類型爲int -> int -> int -> int。您提供的每個參數f都會由於柯里化而使表達式的類型變爲int。例如,f 1 2int -> int,該函數接受一個int並返回一個int,因爲xy12有關,所以它們不再是參數。