Clojure幽灵:传递完整的步入路径到步行者()

时间:2016-07-04 12:33:16

标签: clojure specter

我正在使用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。如何实现这一目标?

谢谢!

0 个答案:

没有答案