假设我有一个如下定义的Clojure树
(def eval-logic
'(:OR
(:METHOD "methodName1" ["a1" "a2" "a3"])
(:METHOD "methodName2" ["b1" "b2" "b3"])
:AND
(:METHOD "methodName3" [])
(:METHOD "methodName4" ["d1"])
))
Run Code Online (Sandbox Code Playgroud)
即树表示一个布尔表达式,其中节点如:OR和:AND表示布尔运算符,树的叶子是方法调用.不评估树,仅遍历以生成在运行时执行实际评估的代码.我应该如何遍历树,访问不同类型的节点,询问节点的父亲,孩子,兄弟姐妹等?是否有任何指针或库可供查看?
树不能太嵌套,因此尾递归不是问题.随意提出一些可能更适合遍历的其他数据结构.
我对深度优先遍历特别感兴趣,因为这是必须生成代码以确保在使用之前定义函数的顺序.此外,树被给予并且不会改变,因此我对添加或删除子项等内容不感兴趣
A. *_*ebb 11
要随意移动树木,请参阅clojure.zip.对于简单的散步,请参阅clojure.walk和tree-seq.在Clojure的Tree访问者中有一篇关于这个主题的IBM文章.
| 归档时间: |
|
| 查看次数: |
5505 次 |
| 最近记录: |