1

嗨,有人可以解释一下为什么这些类型如下所述吗?我知道它们必须是 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

谢谢!

4

2 回答 2

2

稍微扩展一下valtron的答案。一旦你了解了f. 正如 valtron 所说,它的类型是int -> int -> int -> int. 从根本上说,这是一个函数的类型,它接受一个int并返回一个类型的函数int -> int -> int。所以如果你只是传递1f(你在你的例子中没有这样做),你会得到一些类型的东西int -> int -> int

以类似的方式,如果你将 an 传递int给这个返回的函数,你会得到一个 type 的函数int -> int。这是您在示例中所做的事情:f 1 2正是这样做的:它传递1f,然后传递2给返回的函数f。第二个函数调用返回一些 type int -> int,正如顶层显示的那样。

同样,在后面指定三个值f会返回一个 type 的值int。这就是您的第一个示例中发生的情况。

于 2013-03-22T06:12:30.717 回答
1

的类型f,正如您定义的那样,是int -> int -> int -> int。由于柯里化,您提供的每个参数都会减少f表达式的类型。int例如,f 1 2is int -> int,一个接受一个 int 并返回一个 int 的函数,因为xand是用andy柯里化的,所以它们不再是参数了。12

于 2013-03-22T06:03:52.393 回答