我正在使用Nathan Marz的精彩Specter图书馆。我正在用它做语法树转换等等。假设有一个嵌套的数据结构:
(def expr
'([:var price (5)]
[:var output ("")]
(clojure.core/cond
(< price 4)
[:var output ("6")]
(= price 5)
[:var output ("==")]
:else
[:var output ("7")])))
我可以通过以下方式将转换应用于所有:var
个节点:
(transform [(walker #(and (sequential? %1) (= :var (first %1))))]
transform-fn expr)
但是,我想将导航到节点的完整路径传递给transform-fn
,以便区分父:var
条目和嵌套条目。
更一般地说,transform-fn
的操作应该取决于正在操作的节点的完整路径。从某种意义上说,这类似于为VAL
访问的每个节点插入walker
。如何实现这一目标?
谢谢!