Loops 迭代Clojure向量

Loops 迭代Clojure向量,loops,vector,collections,clojure,Loops,Vector,Collections,Clojure,我正在实现一个Clojure函数(gol[coll]),该函数接收大小相同的向量向量1和0,对其进行迭代,检查每个索引的近位置,并返回一个新板;有点像康威的人生游戏 输入: `(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

我正在实现一个Clojure函数
(gol[coll])
,该函数接收大小相同的向量向量1和0,对其进行迭代,检查每个索引的近位置,并返回一个新板;有点像康威的人生游戏

输入:

`(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]]`

如何迭代向量并同时更改值?

使用
中的assoc:

(assoc-in v [0 0] 1)
上述操作将把左上角的值设置为
1

要一次设置多个,您可以在
中减少超过
的assoc

(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]]