Ocaml Int и отрицательные значения
-
06-07-2019 - |
Вопрос
Учитывая этот фрагмент кода OCaml:
let rec range a b =
if a > b then []
else a :: range (a+1) b
;;
Repl говорит мне, что это тип is:
val range : int -> int -> int list = <fun>
Предоставляя ему входные данные, такие как:
range 0 4;;
возвращает список:
- : int list = [0; 1; 2; 3; 4]
Однако предоставление входных данных
range -4 2;;
Выдает ошибку:
Characters 0-5:
range -4 1;;
^^^^^
This expression has type int -> int -> int list but is here used with type int.
Что все это пытается мне сказать?
Решение
когда вы печатаете,
range -4 2;;
Вы должны помнить, что -
- это функция, инфиксная функция, а не унарное отрицание.
Чтобы сделать унарное отрицание, вы можете сделать одну из двух вещей: 1) предшествовать - подписать символом ~, например, ~ -4, или использовать скобки.
Другие советы
Я только что понял, что мне нужно обернуть
-4 in parenthesis
т.е. вызывающий:
range (-4) 0;;
Дает:
- : int list = [-4; -3; -2; -1; 0]
Я оставлю этот вопрос открытым на случай, если кто-нибудь еще столкнется с такой же проблемой.
Просто подводя итог, проблема заключается в том, что -
интерпретируется как функция, а не как знак токена 4
.
Вы можете видеть: Проблемы с языком OCaml для получения дополнительной информации.