2017-10-19 1 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)))))))