Ocaml:为什么这些类型?
问题描述:
嗨可能有人请解释为什么类型如下所述?我知道他们必须是int,因为x+y+z
但是参数的数量(即->
)对我来说似乎是任意的。Ocaml:为什么这些类型?
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
的类型,这一切都很简单。正如瓦龙特所说,它的类型是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
类型的东西,如顶层显示的那样。
以相同的方式,在f
之后指定三个值返回int
类型的值。这是你的第一个例子中发生的事情。
答
您定义的f
的类型为int -> int -> int -> int
。您提供的每个参数f
都会由于柯里化而使表达式的类型变为int
。例如,f 1 2
是int -> int
,该函数接受一个int并返回一个int,因为x
和y
与1
和2
有关,所以它们不再是参数。