Ocaml Int и отрицательные значения - PullRequest
8 голосов
/ 23 октября 2009

Учитывая этот фрагмент кода OCaml:

let rec range a b =
  if a > b then []
  else a :: range (a+1) b
  ;;

Repl говорит мне, что это тип:

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.

Что это пытается мне сказать?

Ответы [ 2 ]

10 голосов
/ 23 октября 2009

при вводе

range -4 2;;

Вы должны помнить, что - - это функция, инфиксная функция, а не унарное отрицание.

Чтобы сделать унарное отрицание, вы можете сделать одно из двух: 1) предшествовать - подписать ~, например, ~ -4, или использовать круглые скобки.

5 голосов
/ 23 октября 2009

Я только что понял, что мне нужно обернуть

-4 in parenthesis

т.е. звонить:

range (-4) 0;;

Дает:

- : int list = [-4; -3; -2; -1; 0]

Я оставлю этот вопрос, если кто-нибудь еще столкнется с той же проблемой.

Чтобы подвести итог, можно сказать, что - интерпретируется как функция, а не как знак токена 4.

Вы можете увидеть: Проблемы с языком OCaml для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...