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. Запись в срез изменит исходный массив.