Ocaml Int和负值

时间:2009-10-23 14:19:32

标签: ocaml type-systems

鉴于此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 个答案:

答案 0 :(得分:10)

输入时

range -4 2;;

你需要记住-是一个函数,一个中缀函数,而不是一元否定。

要做一元否定,你可以做两件事之一,1)先行 - 用〜符号,如〜-4,或用括号。

答案 1 :(得分:5)

我刚刚意识到我需要包装

-4 in parenthesis

即打电话:

range (-4) 0;;

给出:

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

如果其他人遇到同样的问题,我会留下这个问题。

总结一下,问题是-被解释为一个函数,而不是令牌4的符号。

您可以查看:OCaml language issues了解更多信息。