不清楚鑑於SML以下功能:功能的數據類型是SML
fun i a b = let fun j()=a+1 in j end;
函數的數據類型是:
val i = fn : int -> 'a -> unit -> int
我不明白爲什麼int -> 'a -> unit -> int
?
爲什麼不是(int * a') -> unit -> int
,因爲功能i
接收到兩個輸入。
不清楚鑑於SML以下功能:功能的數據類型是SML
fun i a b = let fun j()=a+1 in j end;
函數的數據類型是:
val i = fn : int -> 'a -> unit -> int
我不明白爲什麼int -> 'a -> unit -> int
?
爲什麼不是(int * a') -> unit -> int
,因爲功能i
接收到兩個輸入。
如果將函數定義爲fun i (a,b) = ...
,那麼它將需要一個元組作爲參數,其類型確實是(int * 'a) -> unit -> int
。它將被稱爲i (23,42)()
((23,42)
是一個元組,()
是單位值)。
但是,您將其定義爲fun i a b = ...
,它定義了一個函數,該函數接受一個參數,然後返回接受下一個參數的另一個函數。這是fun i a = fn b => ...
的快捷方式。它可以被稱爲i a b()
。
這個功能(以及SML中的任何功能)實際上都是接收的一個輸入,因爲是currying。
從技術上講,有函數需要單位,即返回帶有返回函數的函數。
所以
fun foo a b = a + b;
fun foo a = fn b => a + b;
等。
捲曲,不攜帶。 ;) – 2013-02-17 16:11:08
@AndreasRossberg我希望先生。哈斯克爾會原諒我;-) – 2013-02-17 20:00:47
也許[this](http://stackoverflow.com/questions/14550740/sml-why-functions-always-take-one-argument-make-language-flexible/14554122#14554122),[this](http ://stackoverflow.com/questions/14432696/what-does-this-function-signature-mean-in-sml/14438864#14438864)和[this](http://stackoverflow.com/questions/8395564/what-咖喱和 - 高級函數 - 毫升/ 8400194#8400194)會啓發你多一點咖喱? – 2013-02-16 23:01:28