如何附加到Clojure原子中的嵌套列表?

时间:2014-03-10 06:06:05

标签: clojure

我想将值附加到Clojure原子中的列表中:

(def thing (atom {:queue '()}))

我知道当它不是原子时,我可以这样做:

(concat '(1 2) '(3))

如何将其转换为交换!命令?

注意:我问了一个涉及地图的类似问题:Using swap to MERGE (append to) a nested map in a Clojure atom?

2 个答案:

答案 0 :(得分:8)

user=> (def thing (atom {:queue '()}))
#'user/thing
user=> (swap! thing update-in [:queue] concat (list 1))
{:queue (1)}
user=> (swap! thing update-in [:queue] concat (list 2))
{:queue (1 2)}
user=> (swap! thing update-in [:queue] concat (list 3))
{:queue (1 2 3)}

答案 1 :(得分:3)

如果你自己编写fn,那么它应该是副作用,因为它可能会调用几次。

(def thing (atom {:queue '()})) 

(swap! thing (fn [c]
    (update-in c [:queue] concat '(1 2 3 3))))