9

以下に定義する Clojure ツリーがあるとします。

(def eval-logic
  '(:OR
     (:METHOD "methodName1" ["a1" "a2" "a3"])
     (:METHOD "methodName2" ["b1" "b2" "b3"])
     :AND
       (:METHOD "methodName3" [])
       (:METHOD "methodName4" ["d1"])
     ))

つまり、ツリーはブール式を表し、:OR や :AND などのノードはブール演算子を表し、ツリーの葉はメソッド呼び出しです。ツリーは評価されません。実行時に実際の評価を実行するコードを生成するためにトラバースされるだけです。ツリーをトラバースしたり、さまざまな種類のノードを訪問したり、ノードの父親、子供、兄弟などを尋ねたりするにはどうすればよいですか? 調べるポインタまたはライブラリはありますか?

ツリーを深く入れ子にすることはできないため、末尾再帰は問題になりません。おそらくトラバースしやすい他のデータ構造を自由に提案してください。

これは、関数が使用される前に定義されていることを確認するためにコードを生成する必要がある順序であるためです。また、ツリーは与えられて変更されないため、子の追加または削除などには興味がありません

4

1 に答える 1

10

ツリーの周りを移動するには、clojure.zipを参照してください。簡単なウォークについては、clojure.walktree-seqを参照してください。この件に関する IBM の記事が、Clojure のツリー ビジターに掲載されています。

于 2013-02-13T13:46:07.233 に答える