替换序列中的值

use*_*791 2 clojure sequence

我在创建一个替换序列中所有出现的值的函数时遇到了问题.

示例:将'a'替换为'z'; 输入:

((a b) f ((a b c) (e r) a) a)
Run Code Online (Sandbox Code Playgroud)

预期产量:

((z b) f ((z b c) (e r) z) z)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Bey*_*mor 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
Run Code Online (Sandbox Code Playgroud)