Ocaml Int和负值

Ocaml Int和负值,ocaml,type-systems,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> 返回列表: - : int list = [0; 1; 2; 3; 4] 然而,提供输入 range -4 2;; 给出了错误: Characters 0-5: range -4

给出这段OCaml代码:

let rec range a b =
  if a > b then []
  else a :: range (a+1) b
  ;;
Repl告诉我它的类型是:

val range : int -> int -> int list = <fun>
返回列表:

- : 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.

这是想告诉我什么?

我刚刚意识到我需要包装一下

-4 in parenthesis
ie呼叫:

range (-4) 0;;
给出:

- : int list = [-4; -3; -2; -1; 0]
我将把这个问题留待以后,以防其他人遇到同样的问题

总之,问题是
-
被解释为一个函数,而不是标记
4
的符号

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

键入时

range -4 2;;
您需要记住,
-
是一个函数,一个中缀函数,而不是一元否定


要做一元否定,你可以做两件事之一,1)在前面用一个~-符号,比如~-4,或者使用括号。

谢谢你提供的关于
~
的提示,我不知道。嗯,
~
没有什么特别之处,整个函数都是定义的,
让(~-)a=0-a
,,浮点数也有一个对应的一元否定函数,我相信你能猜出来。
range -4 2;;