将负整数传递给OCaml中的函数时出错

将负整数传递给OCaml中的函数时出错,ocaml,Ocaml,如果我在OCaml中定义一个函数,例如让fx=x+1

如果我在OCaml中定义一个函数,例如
让fx=x+1f-1它给了我以下错误

Error: This expression has type int -> int
   but an expression was expected of type int

为什么会发生此错误?

基本上,它来自解析器的优先级。编译器认为
f-1
意味着你想用
1
减去
f
。它已经被抱怨了很久了

键入
f(-1)
f~-1
将解决您的问题(后者使用“显式一元减号”)

更新:

如合同所述:

一元否定。你也可以写-e而不是~-e

基本上,
-
既可以用作二进制运算符
4-1
也可以用作一元运算符
-1
。但是,就像你的例子一样,可能会有混淆:
f-1
是“f减1”,而不是“f应用于减1”。因此,添加了
~-
运算符,使其也具有一个不易混淆的一元减号


请注意,空格在这里并不重要,这不会改变,因为许多已经存在的代码可能包含没有空格的操作。

基本上,它来自解析器的优先级。编译器认为
f-1
意味着你想用
1
减去
f
。它已经被抱怨了很久了

键入
f(-1)
f~-1
将解决您的问题(后者使用“显式一元减号”)

更新:

如合同所述:

一元否定。你也可以写-e而不是~-e

基本上,
-
既可以用作二进制运算符
4-1
也可以用作一元运算符
-1
。但是,就像你的例子一样,可能会有混淆:
f-1
是“f减1”,而不是“f应用于减1”。因此,添加了
~-
运算符,使其也具有一个不易混淆的一元减号

请注意,这里的空格并不重要,这不会改变,因为许多已经存在的代码可能包含没有空格的操作