[英]Iterate Clojure vectors
我正在實現一個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-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]]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.