Sml curried函数类型中括号之间的差异
那些退货类型有什么不同Sml curried函数类型中括号之间的差异,sml,smlnj,ml,Sml,Smlnj,Ml,那些退货类型有什么不同 val fn1 : int −> (int −> (int −> int)) val fn2: (int −> int) −> (int −> int) 这将创建类型为的函数 int -> int -> int meaning int -> (int -> int) 是这样吗?没有括号,它们有相同的意思 正如您所说,fn1的函数类型相当于int->int->int->int->int 如果有多个参
val fn1 : int −> (int −> (int −> int))
val fn2: (int −> int) −> (int −> int)
这将创建类型为的函数
int -> int -> int meaning int -> (int -> int)
是这样吗?没有括号,它们有相同的意思 正如您所说,
fn1
的函数类型相当于int->int->int->int->int
如果有多个参数,如fn1 a b c
,那么fn1 a
是int->int->int
类型的函数,fn1 a b
是int->int
类型的函数。因此,fn1
也可以被看作是一个返回函数的函数,该函数返回一个返回int
的函数。添加括号,如int->(int->(int->int))
将突出显示该解释
函数
fn2
不同:它将类型为int->int
的函数作为参数,并返回另一个类型为int->int
的函数来添加,fn2
的类型也可以写成(int->int)->int->int
,但第一个括号不能去掉