OCaml我在哪里犯了错误?

时间:2013-12-08 13:10:39

标签: compiler-errors ocaml

如何更正此错误?

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

错误日志:

  

让_ = inorder tree ;;错误:此表达式的类型为int * int   drzewo * int drzewo          但是期望类型为int drzewo的表达式

2 个答案:

答案 0 :(得分: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)))

答案 1 :(得分:0)

您的错误消息已经非常有用,只需仔细重新阅读即可。 '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)))