OCaml类型的加号运算符

时间:2012-07-03 01:25:35

标签: ocaml

为什么加号(+)的类型被认为是int -> int -> int而不是(int * int) -> int?对我来说,第二个是有道理的,因为它“接受”一个2元组(加数)并返回一个int(它们的总和)。

谢谢!

2 个答案:

答案 0 :(得分:11)

您可以制作(+)类型为(int * int) -> int的语言。实际上,SML就是这样运作的。它只会影响中缀运算符的含义。然而,OCaml约定强烈支持使用curried函数(类型a -> b -> c)而不是未使用的函数。一个很好的结果是你可以部分应用它们。例如((+)7)是类型int -> int的有意义的表达式。我经常发现这种符号很有用。

答案 1 :(得分:2)

这可能看起来有点无用,但这是因为该函数有两个参数。

当一个函数接受一个元组时,它实际上是一个参数。

因为(+)是一个内联函数,所以只使用一个参数就没用了,因为它看起来像+ (1,2)而不是1 + 2