4
考虑以下顺序:如何更换所有出现在嵌套列表中的Clojure
seq = ((a b) ((c d) a) a)
(replace a z seq) => ((z b) ((c d) z) z)
我怎样才能做到这一点使用一个懒惰的序列和尾递归?
考虑以下顺序:如何更换所有出现在嵌套列表中的Clojure
seq = ((a b) ((c d) a) a)
(replace a z seq) => ((z b) ((c d) z) z)
我怎样才能做到这一点使用一个懒惰的序列和尾递归?
看起来你想要走过一个数据结构。
user=> (def s '((:a :b)((:c :d) :a) :a))
#'user/s
user=> (use 'clojure.walk)
nil
user=> (prewalk #(if (= :a %1) :z %1) s)
((:z :b) ((:c :d) :z) :z)
编辑:或者,如果你确实只需要更换,更简单
user=> (prewalk-replace '{a z} '((a b) ((c d) a)))
((z b) ((c d) z))