2017-02-12 78 views
1

我的代码的表达:OCaml的错误预期类型为int(令人困惑的错误)

let safe_log10 = function x -> if (x <= 0.) then None else Some (log10 x);; 

随着输入-1.0,这给:

safe_log10 -1.0;; 
Error: This expression has type float -> float option 
     but an expression was expected of type int 

然而,正常工作与(-1.0)

# safe_log10 (-1.0);; 
- : float option = None 

为什么会发生这种情况,以及如何修复该功能以便为工作?谢谢。

回答

1

这不要紧,-1.0都写在一起,这-仍然是一个二元运算符,你的表情看起来像function - float,这没有任何意义。在OCaml中,与许多其他语言不同,二进制-只能应用于intint;即使是花车,你也需要一个不同的运营商-.