我已經寫了下面的函數爲什麼我得到一個LazySeq轉換錯誤?
(defn insert-block
"Given a block, coordinate and playfield, returns the altered playfield.
Does not check for collisions."
[[x y] block playfield]
(let [blocksize (count block)
insertion (fn [a b] (vector (block a) (playfield b)))
block-indicies (range 0 blocksize)
field-indicies (range y (+ y blocksize))]
(map insertion block-indicies field-indicies)))
塊和操場是向量的兩個向量。出於某種原因,我每次調用這個函數的時候,我得到以下錯誤:
#<ClassCastException java.lang.ClassCastException: clojure.lang.LazySeq cannot be cast to clojure.lang.IFn>
的功能已經被簡化從什麼在我的代碼位 - 「插入」是在原有的更復雜,但我得到無論同樣的錯誤。這讓我瘋狂 - 有沒有人有任何想法?
編輯:我一直在測試它[2 3]的[x y]和[[0 0 0] [0 1 0] [1 1 1]]。 Playfield太大而不能粘貼在這裏,但它是一個包含整數長度爲14的矢量向量。
編輯2:這裏是遊戲區矢量。
[[1 1 1 1 1 1 1 1 1 1 1 1 1 1]
[1 1 1 1 1 1 1 1 1 1 1 1 1 1]
[1 1 0 0 0 0 0 0 0 0 0 0 1 1]
[1 1 0 0 0 0 0 0 0 0 0 0 1 1]
[1 1 0 0 0 0 0 0 0 0 0 0 1 1]
[1 1 0 0 0 0 0 0 0 0 0 0 1 1]
[1 1 0 0 0 0 0 0 0 0 0 0 1 1]
[1 1 0 0 0 0 0 0 0 0 0 0 1 1]
[1 1 0 0 0 0 0 0 0 0 0 0 1 1]
[1 1 0 0 0 0 0 0 0 0 0 0 1 1]
[1 1 0 0 0 0 0 0 0 0 0 0 1 1]
[1 1 0 0 0 0 0 0 0 0 0 0 1 1]
[1 1 0 0 0 0 0 0 0 0 0 0 1 1]
[1 1 0 0 0 0 0 0 0 0 0 0 1 1]
[1 1 0 0 0 0 0 0 0 0 0 0 1 1]
[1 1 0 0 0 0 0 0 0 0 0 0 1 1]
[1 1 0 0 0 0 0 0 0 0 0 0 1 1]
[1 1 0 0 0 0 0 0 0 0 0 0 1 1]
[1 1 0 0 0 0 0 0 0 0 0 0 1 1]
[1 1 0 0 0 0 0 0 0 0 0 0 1 1]
[1 1 0 0 0 0 0 0 0 0 0 0 1 1]
[1 1 0 0 0 0 0 0 0 0 0 0 1 1]
[1 1 0 0 0 0 0 0 0 0 0 0 1 1]
[1 1 0 0 0 0 0 0 0 0 0 0 1 1]
[1 1 1 1 1 1 1 1 1 1 1 1 1 1]
[1 1 1 1 1 1 1 1 1 1 1 1 1 1]]
編輯3:我進一步縮小了範圍 - 下面的代碼工作。看起來訪問塊和playfield矢量中的元素是導致問題的原因,但我仍然不知道爲什麼。
(defn insert-block
"Given a block, coordinate and playfield, returns the altered playfield.
Does not check for collisions."
[[x y] block playfield]
(let [blocksize (count block)
insertion (fn [a b] (vector a b))
block-indicies (range 0 blocksize)
field-indicies (range y (+ y blocksize))]
(map insertion block-indicies field-indicies)))
感謝
還請顯示您提供的參數以獲取該錯誤。 '(insert-block [1 1] [[1 2] [1 2]] [[1 2 3] [4 5 6] [6 8 9]])'例如不會拋出異常,但我不知道如果這是預期的或沒有。我希望你提供了seq而不是vector作爲'block'和or'playfield'的參數。還要注意你的函數返回一個seq而不是一個向量,如果你假設遊戲場總是向量,這看起來是錯誤的。 –
你說得對,我應該包括那個。我編輯了這篇文章。 你對地圖也是正確的 - 這可能會導致未來的問題,雖然這似乎與這個問題無關。 – Joel
對我來說,它爲某些輸入提供了索引超出界限的異常,而不是指出的錯誤。 –