2017-02-12 3 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 

Почему это происходит, и как я могу исправить функцию для работы safe_log10 -1.0? Благодарю.

ответ

1

Это не имеет значения, что - и 1.0 написаны вместе, это - еще бинарный оператор, и ваше выражение выглядит function - float, что не имеет смысла. В OCaml, в отличие от многих других языков, двоичный код - может применяться только к int и int; даже для поплавков вам нужен другой оператор -..