加号运算符的OCaml类型

加号运算符的OCaml类型,ocaml,Ocaml,为什么加号(+)的类型被认为是int->int->int,而不是(int*int)->int?对我来说,第二个是有意义的,因为它“接受”一个2元组(加数),并返回一个int(它们的和) 谢谢大家! 这似乎没有什么帮助,但这是因为该函数有两个参数 当一个函数接受一个元组时,它实际上只接受一个参数 因为(+)是一个内联函数,所以只取一个参数是没有用的,因为它看起来像+(1,2)而不是1+2,(+)的类型是(int*int)->int。事实上,SML就是这样工作的。它只影响中缀运算符的含义。然而,OC

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


谢谢大家!

这似乎没有什么帮助,但这是因为该函数有两个参数

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


因为
(+)
是一个内联函数,所以只取一个参数是没有用的,因为它看起来像
+(1,2)
而不是
1+2
(+)
的类型是
(int*int)->int
。事实上,SML就是这样工作的。它只影响中缀运算符的含义。然而,OCaml约定强烈支持使用curried函数(类型为
a->b->c
),而不是未经编译的函数。一个很好的结果是,您可以部分应用它们。例如,(+)7)是类型为
int->int
的有意义表达式。我发现这个符号非常有用。

你能解释一下(+)7的类型是int->int吗?这让我很困惑。它是如何从int到int的?简单的回答是,它是一个函数,在你给它的任何值上加上7。它相当于
funx->x+7
。对于更长的答案,如果你愿意的话,我可以编辑上面的答案。@JeffreyScofield:从技术上讲,它相当于
fun x->7+x
,但在这里它是相同的。对于
(-)
(非交换)需要记住这一点。