不清楚鉴于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