Синтаксическая ошибка при усреднении переменных

Я только начинаю пытаться изучать 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

Другие вопросы по тегам