Common Lisp:как получить доступ к строке определенного многомерного массива?
допустим, я написал
(setf s (make-array (list 9 9) :element-type 'bit))
so-это матрица битов 9x9.
и я хочу получить 1-й ряд s. Как мне это получить?
я мог бы сделать следующее:
(setf s (make-array 9
:element-type 'array
:initial-element
(make-array 9 :element-type 'bit)))
и получить доступ к первой строке (svref s 0).
но я хочу знать, есть ли встроенный способ.
(и массив 2 dim, кажется, выделяет меньше байтов).
1 ответов
(defun array-slice (arr row)
(make-array (array-dimension arr 1)
:displaced-to arr
:displaced-index-offset (* row (array-dimension arr 1))))
это работает только для срезов строк и не копирует массив, IIRC. Запись в срез изменит исходный массив.