17.2 Доступ к массиву

Для доступа к элементам массива обычно используется функция aref. В отдельных случаях может быть более эффективно использование других функций, таких как svref, char и bit.

[Функция] aref array &rest subscripts

Данная функция возвращает элемент массива array, который задан индексами subscripts. Количество индексов должно совпадать с рангом массива, и каждый индекс должен быть неотрицательным целым числом меньшим чем соответствующий размер измерения.

aref отличается от остальных функций тем, что полностью игнорирует указатели заполнения. aref может получать доступ к любому элементу массива, вне зависимости является он активным или нет. Однако общая функция для последовательностей elt учитывает указатель заполнения. Доступ к элементам за указателем заполнение с помощью elt является ошибкой.

Для изменения элемента массива может использоваться setf в связке с aref.

В некоторых случаях, удобно писать код, который получает элемент из массива, например a, используя список индексов, например z. Это легко сделать используя apply:

(apply #’aref a z)

(Длина списка, конечно же, должна быть равна рангу массива.) Эта конструкция может использоваться с setf для изменения элемента массива на, например, w:

(setf (apply #’aref a z) w)


[Функция] svref simple-vector index

Первый аргумент должен быть простым базовым вектором, то есть объектом типа simple-vector. В результате возвращается элемент вектора simple-vector с индексом index.

index должен быть неотрицательным целым меньшим чем длина вектора.

Для изменения элемента вектора может использоваться setf в связке с svref.

svref идентична aref за исключением того, что требует, чтобы первый аргумент был простым вектором. В некоторых реализациях Common Lisp’а, svref может быть быстрее чем aref в тех случаях, где она применима. Смотрите также schar и sbit