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

时间:2015-12-02 14:11:47

标签: ocaml

如果我在OCaml中定义一个函数,例如let f x = x + 1;;然后我尝试调用它传递一个负数  f -1;;它给了我以下错误

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

为什么会出现此错误?

1 个答案:

答案 0 :(得分:6)

基本上,它来自解析器的优先级。编译器认为f -1表示您想要f减去1。它已被抱怨多年了。

键入f (-1)f ~-1将解决您的问题(后者使用"明确的一元减号")。

更新:

OCaml manual中所述:

  

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

基本上,-既可以用作二元运算符4 - 1,也可以用作一元运算符-1。但是,就像你的情况一样,可能会有混淆:f - 1是" f减去1"而不是" f适用于减去一个"。因此,~-运算符被添加为具有非混淆的一元减号。

请注意,这里的空格并不重要,并且不会发生变化,因为很多现有代码可能包含没有空格的操作。