Ocaml Int和负值

cho*_*ida 8 ocaml type-systems

鉴于此OCaml代码片段:

let rec range a b =
  if a > b then []
  else a :: range (a+1) b
  ;;
Run Code Online (Sandbox Code Playgroud)

Repl告诉我它的类型是:

val range : int -> int -> int list = <fun>
Run Code Online (Sandbox Code Playgroud)

给它输入如下:

range 0 4;;
Run Code Online (Sandbox Code Playgroud)

给出列表:

- : int list = [0; 1; 2; 3; 4]
Run Code Online (Sandbox Code Playgroud)

但是提供输入

range -4 2;;
Run Code Online (Sandbox Code Playgroud)

给出错误:

Characters 0-5:
  range -4 1;;
 ^^^^^
This expression has type int -> int -> int list but is here used with type int.
Run Code Online (Sandbox Code Playgroud)

这是什么试图告诉我的?

nlu*_*oni 10

当你打字时,

range -4 2;;
Run Code Online (Sandbox Code Playgroud)

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

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


cho*_*ida 5

我刚刚意识到我需要包装

-4 in parenthesis
Run Code Online (Sandbox Code Playgroud)

即打电话:

range (-4) 0;;
Run Code Online (Sandbox Code Playgroud)

得到:

- : int list = [-4; -3; -2; -1; 0]
Run Code Online (Sandbox Code Playgroud)

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

只是总结一下这个问题是-被解释为一个函数而不是令牌的标志4.

您可以看到:OCaml语言问题以获取更多信息.