簡體   English   中英

迭代Clojure向量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM