鉴于此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.
这是什么试图告诉我的?
答案 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了解更多信息。