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))
)
)
)
'스왑'(@tree되지 않음) 나무에 직접 작동합니다. 그런 다음 assoc', assoc-in','update','update-in'과 같은 함수 계열을 사용하십시오. –
또한 여기에 'def'를 사용하지 말아야합니다! 로컬 바인딩을 만들려면'let'을 사용하십시오. – Carcigenicate
또한 재현하려는 코드는 변경 가능한 객체를 사용합니다. 직접이 코드를 재현하려고 시도하는 대신 불변의 생각을 사용하려고 시도해야합니다. 원자와 지역의 정의는 "핵 옵션"이며 여기서는 두 가지를 사용하고 있습니다. 조금 더 많은 문맥없이 이것을 어떻게 써야하는지 정확하게 말하기는 어려울 것입니다. – Carcigenicate