【问题标题】:OCaml Where did I make an error?OCaml 我在哪里出错了?
【发布时间】:2013-12-25 13:37:56
【问题描述】:

如何纠正这个错误?

type 'a drzewo = | Puste | Wezel of 'a * 'a drzewo * 'a drzewo

let rec inorder t =
  match t with
  | Puste -> print_int (-1)
  | Wezel (v, l, r) -> (inorder l; print_int v; inorder r)

let tree =
  (1,
   (Wezel (2, (Wezel (3, Puste, Puste)),
      (Wezel (4, (Wezel (5, Puste, Puste)), Puste)))),
   (Wezel (6, Puste, Puste)))

let _ = inorder tree

以及错误日志:

让 _ = 无序树;;错误:此表达式的类型为 int * int drzewo * int drzewo 但是需要一个 int drzewo 类型的表达式

【问题讨论】:

    标签: compiler-errors ocaml


    【解决方案1】:

    问题来了

    let tree =
      (1,
       (Wezel (2, (Wezel (3, Puste, Puste)),
          (Wezel (4, (Wezel (5, Puste, Puste)), Puste)))),
       (Wezel (6, Puste, Puste)))
    

    您没有在前面添加Wezel


    应该是:

    let tree =
          Wezel (1,
           (Wezel (2, (Wezel (3, Puste, Puste)),
              (Wezel (4, (Wezel (5, Puste, Puste)), Puste)))),
           (Wezel (6, Puste, Puste)))
    

    【讨论】:

      【解决方案2】:

      您的错误信息已经非常丰富,只需仔细重新阅读一遍即可。 'tree' 的类型是 'int * int drzewo * int drzewo' (三元组),但它必须是 'int drzewo' (因为 inorder 的类型是 'int drzewo -> unit')。

      那就改正吧:

      let tree = Wezel (1,
                (Wezel (2, (Wezel (3, Puste, Puste)),
                    (Wezel (4, (Wezel (5, Puste, Puste)), Puste)))),
                (Wezel (6, Puste, Puste)))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-02
        • 1970-01-01
        • 2011-03-14
        • 1970-01-01
        • 2018-01-21
        • 1970-01-01
        • 2014-03-01
        相关资源
        最近更新 更多