Я написал следующую функцию
(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] для [xy] и [[0 0 0] [0 1 0] [1 11]] для блока.Поле воспроизведения слишком велико для вставки, но это вектор из 26 векторов, содержащих целые числа, длиной 14.
EDIT2: Вот вектор игрового поля.
[[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: Я сузил это дальше - следующий код работает.Кажется, что проблема связана с доступом к элементам в векторах блоков и игровых полей, но я до сих пор не знаю, почему.
(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)))
Спасибо