(rontolisp) docs
← リファレンス

clojure.zip

ジッパーによる関数的な木の編集を提供する名前空間です。clojure.zip を require すると使えます。 Clojure の同名の名前空間について文書化された振る舞いをもとに rontolisp 向けに書いた Clojure ソースで、 すべてのバックエンドで同じように動きます。

ロケーション(loc)は、注目しているノードとそこまでの経路からなるベクタです。そのメタデータには、 木を木として扱うための 3 つの関数が入っています。移動や編集は新しい loc を返し、root はすべての 編集を反映した木を組み立て直します。

var振る舞い
zipper(zipper branch? children make-node root): 枝を branch? で判定し、子を children で取り出し、ノードと子のシーケンスから make-node で組み立て直す木の、root にある loc
vector-zip、seq-zip、xml-zip入れ子のベクタ、入れ子のシーケンス、:tag・:attrs・:content を持つマップに対するジッパー
node、branch?、children、make-node注目しているノード、それが枝かどうか、その子、ジッパーの方法で組み立て直したノード
path、lefts、rights根から親までのノード、左の兄弟、右の兄弟
down、up、left、right、leftmost、rightmost移動。行き先がなければ nil(leftmost/rightmost は loc 自身を返す)
rootすべての編集を反映した根のノード
replace、edit、insert-left、insert-right、insert-child、append-child、remove編集。remove は、深さ優先の巡回で削除したノードの直前にあたる loc を返す
next、prev、end?深さ優先の巡回。最後のノードの次は終端の loc で、end? がそれを判定する