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))