Types Ocaml:为什么是这些类型?
嗨,有人能解释一下为什么这些类型如下所述吗?我知道它们必须是int,因为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-
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
类型的值。这就是您的第一个示例中发生的情况