ご存知かもしれませんが、OCamlにはfold_left、fold_right、filterなどの高階関数があります。
関数型プログラミングの私のコースでは、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;;
OK、これが私の質問です:fold_tree関数はどのように機能しますか?いくつか例を挙げて、人間の言葉で説明してもらえますか?