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类型的函数。所以如果你只是通过1f(你没有在你的例子中做),你会得到一些类型int -> int -> int

以类似的方式,如果将int传递给此返回的函数,则会返回类型为int -> int的函数。这是你在你的例子中做的事情:f 1 2确实如此:它通过1f,然后将2传递给f返回的函数。第二个函数调用 返回int -> int类型的东西,如顶层显示的那样。

以相同的方式,在f之后指定三个值返回int类型的值。这是你的第一个例子中发生的事情。

您定义的f的类型为int -> int -> int -> int。您提供的每个参数f都会由于柯里化而使表达式的类型变为int。例如,f 1 2int -> int,该函数接受一个int并返回一个int,因为xy12有关,所以它们不再是参数。