我有一个树(列表列表),我想修改树的选定节点。
[
[:a1]
[
[:b1, b2]
[:c1, c2]
]
]
例如,我想将b3
附加到带有b
条目的节点(数组)。
[
[:a1] ; 0
[ ; 1
[:b1, b2, b3] ; 1, 0
[:c1, c2] ; 1, 1
]
]
问题:如何更新给定索引列表的节点,我可以找到目标节点([1, 0]
)?在其他语言中,使用可变树,我可以简单地找到数组,然后执行target_node.append("b3")
,这在clojure中是不可能的。
我想避免显式使用可变的Java对象。
相关
答案 0 :(得分:2)
update-in
会做你想做的事:
user=> (def t [[:a1] [[:b1 :b2] [:c1 :c2]]])
#'user/t
user=> (update-in t [1 0] conj :b3)
[[:a1] [[:b1 :b2 :b3] [:c1 :c2]]]