我想检查树是否平衡(这意味着每片叶子都在同一深度),但是类型错误。
type 'a tree = Node of 'a * 'a tree list;;
let rec fold_tree f (Node (x,l)) =
f x (map (fold_tree f) l);;
let is_balanced t =
fst(
fold_tree
(fun _ (l: (bool * int) list ) ->
((fold_left
(fun h (flag,first_value)->
((fst h)=first_value)&&flag,first_value)
(true,snd(hd l) )
l))
)
t);;
问题在那里:
((fold_left(fun h (flag,first_value)-> ((fst h)=first_value)&&flag,first_value) (true,snd(hd l) ) l))
Ocaml告诉我这是bool * bool的类型,但是我确信这是bool * int的类型,因为l是(bool * int)列表的类型,所以hd l是(bool * int)的类型,所以snd (hd l)是int ...
答案 0 :(得分:2)
一些建议:
List
List.hd
(以便正确处理空列表情况)以您为例,您应该看看内部函数的类型
fun (h:'a) (flag,first_value): 'a->
(fst h=first_value) && flag,first_value