将负整数传递给OCaml中的函数时出错
如果我在OCaml中定义一个函数,例如将负整数传递给OCaml中的函数时出错,ocaml,Ocaml,如果我在OCaml中定义一个函数,例如让fx=x+1
让fx=x+1然后我试着通过一个负数来调用它
f-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”。因此,添加了~-
运算符,使其也具有一个不易混淆的一元减号
请注意,这里的空格并不重要,这不会改变,因为许多已经存在的代码可能包含没有空格的操作