ネストされたベクトルとして表されるツリーがあります。indexedこのように各ノードのインデックスを表示して、ツリーの一般化を行いたいです。
(visit 42); => [0 42]
(visit [6 7]); => [0
; [[0 6]
; [1 7]]]
ナイーブな実装はclojure.zipを直接使用します(すでにここで尋ねられているように)
(defn visit [tree]
(loop [loc (vector-zip tree)]
(if (end? loc)
(root loc)
(recur
(next (edit loc #(conj
[(count (lefts loc))]
%)))))))
ただし、を繰り返すとclojure.zip/next、事前順序トラバーサルが実行され、この場合は無限ループになります(未訪問のノードは無限conjに[:found]ベクトルになります)。別のアプローチはを使用することclojure.walk/postwalkですが、インデックスなどの構造情報を提供しません。
これをどのように実装しますか?postorder-nextすぐに解決するforzipはありますか?