Синтаксическая ошибка при усреднении переменных
Я только начинаю пытаться изучать OCaml. Я написал функцию, чтобы взять два числа с плавающей точкой и вернуть их среднее значение, но я получаю синтаксическую ошибку.
let average a b =
(a +. b) /. 2.0;;
print_float (average 5.0 -5.0);;
Заявленная ошибка
This expression has type float -> float but an expression was expected of type int.
и есть строка, подчеркивающая "в среднем 5,0". OCaml - это версия 4.01.0, а система - Ubuntu 14.10.
2 ответа
Я просто пробую что-то здесь. Глядя на ваш код и пробуя его на онлайн-компиляторе, я получаю следующие результаты.
# let average a b =
# (a +. b) /. 2.0;;
val average : float -> float -> float = <fun>
# average 5.0 6.0;;
- : float = 5.5
# average 5.0 -6.0;;
File "", line 1, characters 0-11:
Error: This expression has type float -> float
but an expression was expected of type int
#
Ошибка выдается, когда одно из значений является отрицательным с плавающей точкой. Пожалуйста, проверьте в этом направлении.
Если вы хотите избежать лишних скобок, вы можете использовать унарный плавающий оператор отрицания ~-.
$ ocaml
OCaml version 4.01.0
# let average a b =
(a +. b) /. 2.0;;
val average : float -> float -> float = <fun>
# print_float (average 5.0 ~-. 5.0);;
0.- : unit = ()
#
Однако этот оператор выглядит так неуклюже, что я никогда не видел его в реальном коде. Поэтому вам нужно иногда использовать круглые скобки с отрицательными числами.
Я немного почитал и поэкспериментировал и написал описание всех операторов для вычитания и отрицания: унарный минус и число с плавающей запятой в OCaml