Вопрос

Учитывая этот фрагмент кода 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 для получения дополнительной информации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top