Spec-Zone.ru › Elisp

Массивы

Объект массива имеет слоты, содержащие ряд других объектов 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API