嗨,有人可以解释一下为什么这些类型如下所述吗?我知道它们必须是 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
谢谢!
稍微扩展一下valtron的答案。一旦你了解了f
. 正如 valtron 所说,它的类型是int -> int -> int -> int
. 从根本上说,这是一个函数的类型,它接受一个int
并返回一个类型的函数int -> int -> int
。所以如果你只是传递1
给f
(你在你的例子中没有这样做),你会得到一些类型的东西int -> int -> int
。
以类似的方式,如果你将 an 传递int
给这个返回的函数,你会得到一个 type 的函数int -> int
。这是您在示例中所做的事情:f 1 2
正是这样做的:它传递1
给f
,然后传递2
给返回的函数f
。第二个函数调用返回一些 type int -> int
,正如顶层显示的那样。
同样,在后面指定三个值f
会返回一个 type 的值int
。这就是您的第一个示例中发生的情况。
的类型f
,正如您定义的那样,是int -> int -> int -> int
。由于柯里化,您提供的每个参数都会减少f
表达式的类型。int
例如,f 1 2
is int -> int
,一个接受一个 int 并返回一个 int 的函数,因为x
and是用andy
柯里化的,所以它们不再是参数了。1
2