2017-10-19 11 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); 
} 

しかし、クロージャ語です。これまでのところ、私はこのようなものが付属していますが、働いていない:私はこのような何か書くと

(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))))))) 
関連する問題