Узел называется красивым, если его значение больше значения любого другого узла, который можно найти на пути к корню. Проблема состоит в том, чтобы подсчитать красивые узлы на заданном дереве.Странная функция на деревьях Ocaml
Вот решение проблемы, но я не могу понять идею наличия аккумулятора функций.
Может ли кто-нибудь объяснить это решение?
open List;;
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 beautiful_nodes t =
let merge x l k =
if x <k then
fold_left (fun a h ->a + h k) 0 l
else
fold_left (fun a h ->a + h x) 0 l + 1
in
fold_tree merge t (-1);;
это не ваш код? не стесняйтесь спрашивать, кто бы это написал, если нет. –
Нет, это не мой код. – guser
Код, который вы даете, не компилируется для меня. Я получаю сообщение об ошибке: 'Это выражение имеет тип int, но ожидалось выражение для типа list (int list -> int) list tree, связанного с окончательным выражением' (-1) '. –