6.3 Функции, которые работают с массивами

В этом разделе мы описываем функции, которые принимают массивы всех типов.

Функция: arrayp object

Эта функция возвращает t, если object является массивом (т.е. вектором, строкой, булевым вектором или символьной таблицей).

(arrayp [a])
     ⇒ t
(arrayp "asdf")
     ⇒ t
(arrayp (syntax-table))    ;; Символьная таблица.
     ⇒ t
Функция: aref arr index

Эта функция возвращает index-й элемент массива или записи arr. Первый элемент имеет индекс ноль.

(setq primes [2 3 5 7 11 13])
     ⇒ [2 3 5 7 11 13]
(aref primes 4)
     ⇒ 11
(aref "abcdefg" 1)
     ⇒ 98           ; «b» — это код ASCII 98.

Смотрите также функцию elt в разделе Последовательности.

Функция: aset array index object

Эта функция устанавливает index-й элемент array равным object. Она возвращает object.

(setq w (vector 'foo 'bar 'baz))
     ⇒ [foo bar baz]
(aset w 0 'fu)
     ⇒ fu
w
     ⇒ [fu bar baz]

;; copy-sequence создаёт копию строки для последующего изменения.
(setq x (copy-sequence "asdfasfd"))
     ⇒ "asdfasfd"
(aset x 3 ?Z)
     ⇒ 90
x
     ⇒ "asdZasfd"

Массив array должен быть изменяемым. См. Изменяемость.

Если array является строкой, а object не является символом, возникает ошибка wrong-type-argument. При необходимости функция преобразует однобайтовую строку в многобайтовую для вставки символа.

Функция: fillarray array object

Эта функция заполняет массив array значением object, так что каждый элемент array становится равным object. Она возвращает array.

(setq a (copy-sequence [a b c d e f g]))
     ⇒ [a b c d e f g]
(fillarray a 0)
     ⇒ [0 0 0 0 0 0 0]
a
     ⇒ [0 0 0 0 0 0 0]
(setq s (copy-sequence "When in the course"))
     ⇒ "When in the course"
(fillarray s ?-)
     ⇒ "------------------"

Если array является строкой, а object не является символом, возникает ошибка wrong-type-argument.

Общие функции для последовательностей copy-sequence и length часто полезны для объектов, заведомо являющихся массивами. См. Последовательности.