Массивы
Объект массива имеет слоты, содержащие ряд других объектов Lisp, называемых элементами массива. Любой элемент массива может быть доступен за постоянное время. В отличие от этого, время доступа к элементу списка пропорционально позиции этого элемента в списке.
Emacs определяет четыре типа массивов, все одномерные: строки (см. Тип строки), векторы (см. Тип вектора), векторы-булевых значений (см. Тип вектора-булевых значений) и таблицы символов (см. Тип таблицы символов). Векторы и таблицы символов могут содержать элементы любого типа, но строки могут содержать только символы, а векторы-булевых значений могут содержать только t и nil.
Все четыре вида массивов имеют следующие характеристики:
- Первый элемент массива имеет индекс ноль, второй элемент имеет индекс 1 и так далее. Это называется индексированием с нулевым началом. Например, массив из четырех элементов имеет индексы 0, 1, 2 и 3.
- Длина массива фиксируется после его создания; вы не можете изменить длину существующего массива.
- Для целей вычисления массив является константой — т. е. он вычисляется в себя.
- Элементы массива можно ссылаться или изменять с помощью функций
arefиasetсоответственно (см. Функции массивов).
При создании массива, кроме таблицы символов, необходимо указать его длину. Вы не можете указать длину таблицы символов, поскольку она определяется диапазоном кодов символов.
В принципе, если вам нужен массив символов текста, вы можете использовать либо строку, либо вектор. На практике мы всегда выбираем строки для таких приложений по четырём причинам:
- Они занимают в четыре раза меньше места, чем вектор с теми же элементами.
- Строки выводятся таким образом, что содержимое отображается как текст более наглядно.
- Строки могут хранить свойства текста. См. Свойства текста.
- Многие специализированные средства редактирования и ввода-вывода Emacs принимают только строки. Например, вы не можете вставить вектор символов в буфер так же, как вы можете вставить строку. См. Строки и символы.
Напротив, для массива символов ввода с клавиатуры (такого как последовательность нажатий клавиш) может потребоваться вектор, поскольку многие символы ввода с клавиатуры находятся за пределами диапазона, который умещается в строке. См. Ввод последовательности нажатий клавиш.
Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Arrays.html