Я хочу проверить, сбалансировано ли дерево (это означает, что каждый лист находится на одной глубине), но у меня проблема с неправильным типом.
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), так что (hd l) - это тип int ...