2017-10-19 166 views
1

我不知道如何完成这项工作,也许有人可以帮助我?我想做这样的事情:将元素添加到嵌套矢量

vector<int> L[MAX_V]; 
for(int i=1;i<N;++i){ 
    scanf("%d %d",&u,&v); 
    --u; --v; 
    L[u].push_back(v); 
    L[v].push_back(u); 
} 

,但在clojure语言。到目前为止,我已经配备了这样的事情,但它不工作:

(defn LoadTree [] 
    (def n (read-string (read-line))) 
    (def tree (atom (into [] (repeat n [])))) 
    (loop [x n] 
    (when (> x 1) 
     (let [input (read-string (str "[" (read-line) "]"))] 
     (swap! (get @tree (dec (get input 0))) conj (dec (get input 1))) <-Error 
     (swap! (get @tree (dec (get input 1))) conj (dec (get input 0))) <-Error 
     (recur (dec x)) 
    ) 
    ) 
) 
+0

'交换'应该在树直接工作(不@tree)。然后看看使用函数族中的一个:'assoc','assoc-in','update','update-in'。 –

+1

另外,它需要说:不要在这里使用'def'!使用'let'来创建本地绑定。 – Carcigenicate

+0

另请注意,您尝试重现的代码使用可变对象。你不应该试图直接复制这些代码,而应该试图利用不变的想法。原子和地方定义是“核选项”,你在这里使用两者。如果没有更多的上下文,你很难确切地说出你应该怎么写。 – Carcigenicate

回答

1

我会写这样的事情:

(defn foo [num-reads size] 
    (loop [i num-reads, r (vec (repeat size []))] 
    (if (zero? i) 
     r 
     (let [[u v] (repeatedly read)] 
     (recur (dec i), (-> r (update u conj v) (update v conj u)))))))