Types Ocaml:为什么是这些类型?

Types Ocaml:为什么是这些类型?,types,ocaml,Types,Ocaml,嗨,有人能解释一下为什么这些类型如下所述吗?我知道它们必须是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 谢谢 您定义的f的类型是int-

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

谢谢

您定义的
f
的类型是
int->int->int->int->int
。您提供的每个参数
f
都会因为使用curry而从表达式类型中去掉一个
int
。例如,
F12
int->int
,一个接受int并返回int的函数,因为
x
y
1
2
,所以它们不再是参数。

稍微扩展一下valtron的回答。一旦您了解了
f
的类型,这一切都很简单。正如valtron所说,它的类型是
int->int->int->int->int
。基本上,这是一种函数类型,它接受
int
并返回
int->int->int
类型的函数。因此,如果您只将
1
传递给
f
(在您的示例中没有这样做),您将返回
int->int->int
类型的内容

以类似的方式,如果将
int
传递给此返回函数,则返回类型为
int->int
的函数。这是您在示例中所做的:
F12
正是这样做的:它将
1
传递给
f
,然后将
2
传递给
f
返回的函数。这是第二个函数调用 返回类型为
int->int
的内容,如顶级所示

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