嗨,有人可以解释为什么类型如下所述?我明白他们必须是int,因为x+y+z
但参数的数量(即->
)对我来说似乎是任意的。
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
谢谢!
答案 0 :(得分:2)
稍微扩大valtron的答案。一旦你理解了f
的类型,这一切都很简单。正如valtron所说,它的类型是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
类型的东西,就像toplevel显示的那样。
以同样的方式,在f
之后指定三个值会返回类型int
的值。这就是你的第一个例子中发生的事情。
答案 1 :(得分:1)
您定义的f
类型为int -> int -> int -> int
。由于currying,您提供的每个参数f
都会从表达式的类型中删除int
。例如,f 1 2
是int -> int
,这是一个接受int并返回int的函数,因为x
和y
与1
和{{1}相结合,所以他们不再是参数了。