Дано:
type 'a tree = Empty | Node of 'a * 'a tree * 'a tree
Использовать:
let rec tree_fold f e t = match t with
| Empty -> e
| Node (x, l, r) -> f x (tree_fold f e l) (tree_fold f e r);;
для преобразования двоичного дерева в список. Пример.
let someTree = Node (1,Node(2,Node(3,Empty,Empty),Empty),Empty)
tree2list someTree
дает [1;2;3]
.
Моя попытка:
let tree2list tr = match tr with
| Empty -> Empty
| Node (x,l,r) -> (tree_fold (fun acc tree-> tree::acc) [] tr)
Это дает ошибку:
This expression has type 'a list but an expression was expected of type 'b -> 'b .
Я занимаюсь этим часами и продолжаю получать подобные ошибки. Любая помощь будет очень признательна, даже небольшой намек будет замечательным.
Спасибо.