假设我有一个Clojure树,如下所定义
(def eval-logic
'(:OR
(:METHOD "methodName1" ["a1" "a2" "a3"])
(:METHOD "methodName2" ["b1" "b2" "b3"])
:AND
(:METHOD "methodName3" [])
(:METHOD "methodName4" ["d1"])
))
即树表示一个布尔表达式,其中像:OR和:AND这样的节点表示布尔运算符,而树的叶子是方法调用。该树不需要求值,只需遍历以生成在运行时执行实际评估的代码。如何遍历树,访问不同类型的节点,请求节点的父节点、子节点、兄弟节点等?是否有指针或库可供参考?树不能太深嵌套,因此尾递归不是问题。可以提出一些其他数据结构,可能更易于遍历。我特别关注深度优先遍历,因为这是必须按顺序生成代码以确保在使用函数之前定义它们的顺序。此外,树是给定的且不会改变,因此我不对添加或删除子项等操作感兴趣。