Следующие функции извлекают интересную информацию, и это не элементы массива.
array-element-type возвращает спецификатор типа для множества объектов, которые могут быть сохранены в массиве array. Это множество может быть больше чем то, которое запрашивалось в функции make-array. Например, результат
может быть (mod 5), (mod 8), fixnum, t или любой другой тип, для которого (mod 5) является подтипом. Смотрите subtypep.
Эта функция возвращает количество измерений (осей) массива array. Результат будет неотрицательным целым. Смотрите array-rank-limit.
Данная функция возвращает размер измерения axis-number массива array. array может быть любым видом массива, и axis-number должен быть неотрицательным целым меньшим чем ранг массива array. Если array является вектором с указателем заполнения, array-dimension возвращает общий размер вектора, включая неактивные элементы, а не размер ограниченный указателем заполнения. (Функция length будет возвращать размер ограниченный указателем заполнения.)
array-dimensions возвращает список, элементы которого являются размерами измерений массива array.
array-total-size возвращает общее количество элементов массива array, которое вычислено как произведение размеров всех измерений.
Следует отметить, что общий размер нульмерного (FIXME) массива равен 1. Общий размер одномерного массива вычисляется без учёта указателя заполнения.
Данный предикат проверяет, являются ли индексы subscripts для массива array корректными. Если они корректны, предикат истинен, иначе ложен. subscripts должен быть целыми числами. Количество индексов subscripts должно равняться рангу массива. Как и aref, array-in-bounds-p игнорирует указатели заполнения.
Данная функция принимает массив и корректные для него индексы и возвращает одиночное неотрицательное целое значение меньшее чем общий размер массива, которое идентифицирует элемент, полагаясь на построчный порядок хранения элементов. Количество указанных индексов subscripts должно равняться рангу массива. Каждый индекс должен быть неотрицательным целым числом меньшим чем соответствующий размер измерения. Как и aref, array-row-major-index игнорирует указатели заполнения.
Возможно определение array-row-major-index, без проверки на ошибки, может выглядеть так:
Для одномерного массива, результат array-row-major-index всегда равен переданному индексу.
Данная функция позволяет получить доступ к элементу, как если бы массив был одномерный. Аргумент index должен быть неотрицательным целым меньшим чем общий размер массива array. Данная функция индексирует массив, как если бы он был одномерный с построчным порядком. Эту функцию можно понять в терминах aref:
Другими словами, можно обработать массив как одномерный с помощью создания нового одномерного массива, который соединён с исходным, и получить доступ к новому массиву. И наоборот, aref может быть описана в терминах row-major-aref:
Как и aref, row-major-aref полностью игнорирует указатели заполнения. Для изменения элемента массива, можно комбинировать вызов row-major-aref с формой setf.
Эта операция облегчает написание кода, который обрабатывает массивы различных рангов. Предположим, что необходимо обнулить содержимое массива tennis-scores. Можно решить это так:
К сожалению, так как fill не может принимать многомерные массивы, в данном примере создаётся соединённый массив, что является лишней операцией. Другим способом является отдельная обработка каждого измерения многомерного массива:
От такого кода быстро приходит усталость. Кроме того, данный подход не желателен, так как некоторые реализации Common Lisp’а будут фактически поддерживать не более 7 измерений. Рекурсивно вложенные циклы справляются с задачей лучше, но код всё ещё выглядит как лапша:
Является ли этот код эффективным зависит от многих параметров реализации, таких как способ обработки &rest аргументов и компиляции apply вызовов. Только посмотрите как просто использовать для задачи row-major-aref!
Нет сомнения, что этот код, слаще любых медовых сот.
Если аргумент, который должен быть массивом, может быть расширен, данный предикат истинен, иначе ложен.
X3J13 voted in June 1989 to clarify that adjustable-array-p is true of an array if and only if adjust-array, when applied to that array, will return the same array, that is, an array eq to the original array. If the :adjustable argument to make-array is non-nil when an array is created, then adjustable-array-p must be true of that array. If an array is created with the :adjustable argument nil (or omitted), then adjustable-array-p may be true or false of that array, depending on the implementation. X3J13 further voted to define the terminology “adjustable array” to mean precisely “an array of which adjustable-array-p is true.” See make-array and adjust-array.
функция возвращает два значение. Первое значение является массивом соединенным с данным, и второе значение обозначает смещение соединения. Если массив не был соединен ни с одним массивом возвращаются значения nil и 0.