二分木のためのジッパーを作ります。
ジッパーは、データ構造の中を移動したり、そのデータ構造を操作したりするための、純粋関数型の手法です。ジッパーは基本的に、あるデータ構造と、そのデータ構造内を指すポインタ(これをフォーカスと呼びます)を保持しています。
例えば、ローズツリー(各ノードが値と子ノードのリストを持つ木)が与えられたとき、ジッパーは次のような操作に対応しているかもしれません。
from_tree(ローズツリーからジッパーを取り出します。フォーカスは根ノードにあります)to_tree(ジッパーからローズツリーを取り出します)value(フォーカスノードの値を取得します)prev(フォーカスを同じ親の前の子ノードに移動します。新しいジッパーを返します)next(フォーカスを同じ親の次の子ノードに移動します。新しいジッパーを返します)up(フォーカスを親ノードに移動します。新しいジッパーを返します)set_value(フォーカスノードの値を設定します。新しいジッパーを返します)insert_before(フォーカスノードの前に新しい部分木を挿入します。挿入された部分木はフォーカスノードのprevになり、新しいジッパーを返します)insert_after(フォーカスノードのあとに新しい部分木を挿入します。挿入された部分木はフォーカスノードのnextになり、新しいジッパーを返します)delete(フォーカスノードとそのすべての部分木を削除します。フォーカスは、可能であればnextノードへ、それができなければ可能であればprevノードへ、それもできなければ親ノードへ移動します。新しいジッパーを返します)