Ocaml:为什么这些类型?

时间:2013-03-22 05:59:34

标签: 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

谢谢!

2 个答案:

答案 0 :(得分:2)

稍微扩大valtron的答案。一旦你理解了f的类型,这一切都很简单。正如valtron所说,它的类型是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类型的东西,就像toplevel显示的那样。

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

答案 1 :(得分:1)

您定义的f类型为int -> int -> int -> int。由于currying,您提供的每个参数f都会从表达式的类型中删除int。例如,f 1 2int -> int,这是一个接受int并返回int的函数,因为xy1和{{1}相结合,所以他们不再是参数了。