Как вы знаете, есть высшие функции порядка в OCaml, такие как fold_left, fold_right, фильтр и т.п.fold_tree в OCaml
На моем курсе в функциональном программировании была введена функция с именем fold_tree, которая является чем-то вроде fold_left/right, а не в списках, а на (двоичных) деревьях. Это выглядит следующим образом:
let rec fold_tree f a t =
match t with
Leaf -> a |
Node (l, x, r) -> f x (fold_tree f a l) (fold_tree f a r);;
Где дерево определяется как:
type 'a tree =
Node of 'a tree * 'a * 'a tree |
Leaf;;
ОК, вот мой вопрос: как же функция fold_tree работы? Не могли бы вы привести несколько примеров и объяснить человеческий язык?
Спасибо за отличный пример ;). Это помогло мне понять основы, теперь мне нужно что-то более сложное. – equrts
** f принимает 3 аргумента, все тот же тип дерева и возвращает то же самое. ** Один из них является типом дерева, два других являются аккумуляторами одного и того же типа, согласующиеся со значением по умолчанию, совпадающим с лист. – nlucaroni
@nlucaroni: Он был сформулирован для этого конкретного примера, но в остальном вы правы. –