2017-11-26 9 views
1

私は、1と0の同じサイズのベクトルのベクトルを受け取るClojure関数(gol [coll])を実装しています。これを繰り返して、各インデックスの近い位置を確認して新しいボードを返します。生命のコンウェイのゲームのようなものClojureベクトルを反復する

入力:

`(gol [[0 0 0 0 0] 
     [0 0 0 0 0] 
     [0 1 1 1 0] 
     [0 0 0 0 0] 
     [0 0 0 0 0]])` 

出力:

`[[0 0 0 0 0] 
    [0 0 1 0 0] 
    [0 0 1 0 0] 
    [0 0 1 0 0] 
    [0 0 0 0 0]]` 

がどのようにベクトルを反復処理し、同時に値を変更できますか?

答えて

1

使用assoc-in

(assoc-in v [0 0] 1) 

は、上記1に左上の値を設定します。

多くを一度に設定すると、assoc-inを減らすことができます。変換あなたの出力にあなたの入力から行くために

(def new-values [[[0 0] 1] 
       [[0 1] 2] 
       [[0 2] 3]]) 

(reduce 
    (fn [acc ele] 
    (apply assoc-in acc ele)) 
    v 
    new-values) 

;;=> [[1 2 3 0 0] ...] 

は次のようになります。

[[[2 1] 0] 
[[2 3] 0] 
[[1 2] 1] 
[[3 2] 1]] 
関連する問題