我正在实现一个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]]`
如何迭代矢量并同时更改值?
答案 0 :(得分:2)
使用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]]