6

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

谢谢!

4

2 回答 2

12

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

于 2012-07-03T01:42:52.467 回答
1

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

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

因为(+)是一个内联函数,所以采用单个参数将没有用,因为它看起来+ (1,2)1 + 2.

于 2012-07-03T01:29:07.990 回答