代码之家  ›  专栏  ›  技术社区  ›  chollida

ocaml int和负值

  •  7
  • chollida  · 技术社区  · 15 年前

    鉴于这段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.
    

    这是想告诉我什么?

    2 回复  |  直到 15 年前
        1
  •  9
  •   nlucaroni    15 年前

    键入时,

    range -4 2;;
    

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

    要做一元否定,你可以做两件事中的一件,1)用~,比如~-4,或使用括号。

        2
  •  5
  •   chollida    15 年前

    我刚意识到我需要把

    -4 in parenthesis
    

    IE呼叫:

    range (-4) 0;;
    

    给予:

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

    我会把这个问题留到一边,以免其他人也遇到同样的问题。

    总结一下问题是 - 被解释为函数而不是标记的符号 4 .

    你可以看到: OCaml language issues 更多信息。

    推荐文章