シーケンス内のすべての値を置き換える関数の作成に問題があります。
例: 'a' を 'z' に置き換えます。入力:
((a b) f ((a b c) (e r) a) a)
期待される出力:
((z b) f ((z b c) (e r) z) z)
何か案は?
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
(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)