clojure中的更新树
我有一个树(列表列表),我想修改树的选定节点clojure中的更新树,clojure,Clojure,我有一个树(列表列表),我想修改树的选定节点 [ [:a1] [ [:b1, b2] [:c1, c2] ] ] 例如,我想用b条目将b3附加到节点(数组)中 [ [:a1] ; 0 [ ; 1 [:b1, b2, b3] ; 1, 0 [:c1, c2] ; 1, 1 ] ] 问题:如何更新给定索引列表中的节点,以便找到目标节点([1,0])?在其他语言中,使用可
[
[:a1]
[
[:b1, b2]
[:c1, c2]
]
]
例如,我想用b
条目将b3
附加到节点(数组)中
[
[:a1] ; 0
[ ; 1
[:b1, b2, b3] ; 1, 0
[:c1, c2] ; 1, 1
]
]
问题:如何更新给定索引列表中的节点,以便找到目标节点([1,0]
)?在其他语言中,使用可变树,我可以简单地找到数组,并执行target\u node.append(“b3”)
,这在clojure中是不可能的
我希望避免显式使用可变Java对象
相关的
中的更新将执行您想要的操作:
user=> (def t [[:a1] [[:b1 :b2] [:c1 :c2]]])
#'user/t
user=> (update-in t [1 0] conj :b3)
[[:a1] [[:b1 :b2 :b3] [:c1 :c2]]]
记住,当你有不可变的结构时,你只需返回一个新的树,并将新的值放在树的位置上。你可能想使用映射而不是向量。