嗨可能有人請解釋爲什麼類型如下所述?我知道他們必須是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
謝謝!
嗨可能有人請解釋爲什麼類型如下所述?我知道他們必須是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
謝謝!
在valtron的答案上略微擴大。一旦你瞭解了f
的類型,這一切都很簡單。正如瓦龍特所說,它的類型是int -> int -> int -> int
。基本上,這是一個函數的類型,它需要一個int
並返回int -> int -> int
類型的函數。所以如果你只是通過1
到f
(你沒有在你的例子中做),你會得到一些類型int -> int -> int
。
以類似的方式,如果將int
傳遞給此返回的函數,則會返回類型爲int -> int
的函數。這是你在你的例子中做的事情:f 1 2
確實如此:它通過1
到f
,然後將2
傳遞給f
返回的函數。第二個函數調用 返回int -> int
類型的東西,如頂層顯示的那樣。
以相同的方式,在f
之後指定三個值返回int
類型的值。這是你的第一個例子中發生的事情。
您定義的f
的類型爲int -> int -> int -> int
。您提供的每個參數f
都會由於柯里化而使表達式的類型變爲int
。例如,f 1 2
是int -> int
,該函數接受一個int並返回一個int,因爲x
和y
與1
和2
有關,所以它們不再是參數。