我正在建造一個掃雷艇,其中的遊戲板是2D陣列。在clojure中使用2d數組的最佳做法?
爲了生成棋盤,我需要獲得一個2D數組,隨機放置一些炸彈,計算每個場的所有相鄰炸彈,然後將所有與另一個值(顯示)一起打包到應該是最終值的Map中的每個領域。
看來,要做到這一切,我需要像map,filter,nth或zip之類的函數的幫助,而不是在列表上工作,他們應該在2d數組上工作。我已經開始建立這些,但似乎是錯誤的路要走。
是否有一些很酷的抽象可以幫助我使用2d數組上的現有函數?或者是否有任何已經存在的函數來處理二維數組?
編輯:我是這樣做的方式 - 心裏對自己說,應該有更好的辦法之前 - 是這樣的:
(defn mapmap [f xxs]
(for [xs xxs]
(map f xs)))
(defn mapmap-coords [f xxs]
(for [[i xs] (map-indexed list xxs)]
(map-indexed (fn [j x] (f j i)) xs)))
(defn get-value [board x y]
(if (or (< x 0) (< y 0) (< (dec (count board)) y))
false
(let [xs (nth board y)]
(if (< (dec (count xs)) x)
false
(nth xs x)))))
https://github.com/mikera/core.matrix – 2014-09-22 18:55:38