如何更正此错误?
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的表达式
答案 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)))