加号运算符的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
,但在这里它是相同的。对于(-)
(非交换)需要记住这一点。