以下に定義する Clojure ツリーがあるとします。
(def eval-logic
'(:OR
(:METHOD "methodName1" ["a1" "a2" "a3"])
(:METHOD "methodName2" ["b1" "b2" "b3"])
:AND
(:METHOD "methodName3" [])
(:METHOD "methodName4" ["d1"])
))
つまり、ツリーはブール式を表し、:OR や :AND などのノードはブール演算子を表し、ツリーの葉はメソッド呼び出しです。ツリーは評価されません。実行時に実際の評価を実行するコードを生成するためにトラバースされるだけです。ツリーをトラバースしたり、さまざまな種類のノードを訪問したり、ノードの父親、子供、兄弟などを尋ねたりするにはどうすればよいですか? 調べるポインタまたはライブラリはありますか?
ツリーを深く入れ子にすることはできないため、末尾再帰は問題になりません。おそらくトラバースしやすい他のデータ構造を自由に提案してください。
これは、関数が使用される前に定義されていることを確認するためにコードを生成する必要がある順序であるためです。また、ツリーは与えられて変更されないため、子の追加または削除などには興味がありません