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,或用括号.
我刚刚意识到我需要包装
-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语言问题以获取更多信息.