我在创建一个替换序列中所有出现的值的函数时遇到了问题。
示例:将'a'替换为'z';输入:
((a b) f ((a b c) (e r) a) a)
预期产出:
((z b) f ((z b c) (e r) z) z)
有什么想法吗?
答案 0 :(得分:5)
prewalk-replace
比@ mobyte的答案稍微简单一些:
(def thing '( (a b) f ( (a b c) (e r) a ) a ))
(use '[clojure.walk :only [prewalk-replace]])
(prewalk-replace {'a 'z} thing)
; ((z b) f ((z b c) (e r) z) z
答案 1 :(得分:1)
(use '[clojure.walk :only (postwalk)])
(postwalk #(if (= % 'a) 'z %) '( (a b) f ( (a b c) (e r) a ) a ))
-> ((z b) f ((z b c) (e r) z) z)