2017-02-12 38 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;即使是花車,你也需要一個不同的運營商-.