Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
clojure中的更新树_Clojure - Fatal编程技术网

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

记住,当你有不可变的结构时,你只需返回一个新的树,并将新的值放在树的位置上。你可能想使用映射而不是向量。