Ocaml Int和负值
给出这段OCaml代码: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
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;;