鉴于此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.

这是什么试图告诉我的?

有帮助吗?

解决方案

输入时

range -4 2;;

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

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

其他提示

我刚刚意识到我需要包装

-4 in parenthesis

即打电话:

range (-4) 0;;

给出:

- : int list = [-4; -3; -2; -1; 0]

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

总结一下,问题是 - 被解释为一个函数,而不是令牌 4 的符号。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top