在clojure中更新树

时间:2014-09-15 07:53:39

标签: clojure

我有一个树(列表列表),我想修改树的选定节点。

[
  [: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对象。

相关

1 个答案:

答案 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]]]