2

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

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

((a b) f ((a b c) (e r) a) a)

预期输出:

((z b) f ((z b c) (e r) z) z)

有任何想法吗?

4

2 回答 2

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
于 2012-12-17T19:36:16.103 回答
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)
于 2012-12-17T18:25:02.623 回答