SML中的函数数据类型不清楚
给定SML中的以下功能:SML中的函数数据类型不清楚,sml,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中的任何函数)实际上是接收一个输入,因为使用了curry 从技术上讲,有一个函数取单位,它返回的函数取‘a’,它返回的函数取int 所以
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中的任何函数)实际上是接收一个输入,因为使用了curry
从技术上讲,有一个函数取单位,它返回的函数取‘a’,它返回的函数取int
所以
是
等等 这个函数(以及SML中的任何函数)实际上是接收一个输入,因为使用了curry
从技术上讲,有一个函数取单位,它返回的函数取‘a’,它返回的函数取int
所以
是
等等 如果您将函数定义为
funi(a,b)=……
,那么它将以一个元组作为参数,其类型实际上是(int*'a)->unit->int
。它将被称为i(23,42)(
((23,42)
是一个元组,()
是单位值)
但是,您将其定义为
funiab=…
,它定义了一个接受一个参数的函数,然后返回另一个接受下一个参数的函数。这是一个快捷方式,funia=fnb=>…
。它可以被称为iab()
如果您将函数定义为funi(a,b)=……
,那么它将接受一个元组作为参数,它的类型实际上是(int*'a)->unit->int
。它将被称为i(23,42)(
((23,42)
是一个元组,()
是单位值)
但是,您将其定义为
funiab=…
,它定义了一个接受一个参数的函数,然后返回另一个接受下一个参数的函数。这是一个快捷方式,funia=fnb=>…
。它可以被称为iab()
也许,它会给你更多的关于咖喱的知识?也许,它会给你更多的关于咖喱的知识?咖喱,而不是随身携带。)@我希望哈斯克尔先生能原谅我;-)(用咖喱,不带)@我希望哈斯克尔先生能原谅我;-)
fun foo a b = a + b;
fun foo a = fn b => a + b;