Таблицы символов
Таблица символов очень похожа на вектор, за исключением того, что она индексируется кодами символов. Любой допустимый код символа без модификаторов может использоваться в качестве индекса в таблице символов. Вы можете получить доступ к элементам таблицы символов с помощью aref и aset, как и в любом массиве. Кроме того, таблица символов может иметь дополнительные ячейки для хранения дополнительных данных, не связанных с конкретными кодами символов. Как и векторы, таблицы символов являются константами при вычислении и могут содержать элементы любого типа.
Каждая таблица символов имеет подтип, символ, который выполняет две функции:
- Подтип предоставляет простой способ определить, для чего предназначена таблица символов. Например, таблицы отображения являются таблицами символов с
display-tableв качестве подтипа, а таблицы синтаксиса — таблицами символов сsyntax-tableв качестве подтипа. Подтип можно запросить с помощью функцииchar-table-subtype, описанной ниже. - Подтип управляет количеством дополнительных ячеек в таблице символов. Это число определяется свойством символа
char-table-extra-slotsподтипа (см. Свойства символов), значение которого должно быть целым числом от 0 до 10. Если у подтипа нет такого свойства символа, у таблицы символов нет дополнительных ячеек.
Таблица символов может иметь родителя, который является другой таблицей символов. Если это так, то всякий раз, когда таблица символов указывает nil для конкретного символа c, она наследует значение, указанное в родительской таблице. Другими словами, (aref char-table c) возвращает значение из родителя таблицы символов, если сама таблица символов указывает nil.
Таблица символов также может иметь значение по умолчанию. В таком случае (aref char-table c) возвращает значение по умолчанию всякий раз, когда таблица символов не указывает другое значение, отличное от nil.
- Функция: make-char-table подтип &optional init
-
Возвращает только что созданную таблицу символов с подтипом подтип (символ). Каждый элемент инициализируется значением init, которое по умолчанию равно
nil. Вы не можете изменить подтип таблицы символов после ее создания.Нет аргумента для указания длины таблицы символов, поскольку все таблицы символов имеют место для любого допустимого кода символа в качестве индекса.
Если у подтипа есть свойство символа
char-table-extra-slots, это свойство указывает количество дополнительных ячеек в таблице символов. Оно должно быть целым числом от 0 до 10; в противном случаеmake-char-tableвызывает ошибку. Если у подтипа нет свойства символаchar-table-extra-slots(см. Списки свойств), у таблицы символов нет дополнительных ячеек.
- Функция: char-table-p объект
Эта функция возвращает
t, если объект является таблицей символов, иnilв противном случае.
- Функция: char-table-subtype таблица символов
Эта функция возвращает символ подтипа таблицы символов.
Нет специальной функции для доступа к значениям по умолчанию в таблице символов. Для этого используйте char-table-range (см. ниже).
- Функция: char-table-parent таблица символов
Эта функция возвращает родителя таблицы символов. Родитель всегда является либо
nil, либо другой таблицей символов.
- Функция: set-char-table-parent таблица символов новый-родитель
Эта функция устанавливает родителя таблицы символов в новый-родитель.
- Функция: char-table-extra-slot таблица символов n
Эта функция возвращает содержимое дополнительной ячейки n (нумерация с нуля) таблицы символов. Количество дополнительных ячеек в таблице символов определяется ее подтипом.
- Функция: set-char-table-extra-slot таблица символов n значение
Эта функция сохраняет значение в дополнительной ячейке n (нумерация с нуля) таблицы символов.
Таблица символов может указывать значение элемента для одного кода символа; она также может указывать значение для всего набора символов.
- Функция: char-table-range таблица символов диапазон
-
Это возвращает значение, указанное в таблице символов для диапазона символов диапазон. Вот возможные значения для диапазон:
nil-
Относится к значению по умолчанию.
- символ
-
Относится к элементу для символа символ (предполагается, что символ — это допустимый код символа).
(from . to)Список пар содержит все символы в диапазоне ‘[от..до]’.
- Функция: set-char-table-range таблица символов диапазон значение
-
Эта функция устанавливает значение в таблице символов для диапазона символов диапазон. Вот возможные значения для диапазон:
nil-
Относится к значению по умолчанию.
t-
Относится ко всему диапазону кодов символов.
- символ
-
Относится к элементу для символа символ (предполагается, что символ — это допустимый код символа).
(from . to)Список пар содержит все символы в диапазоне ‘[от..до]’.
- Функция: map-char-table функция таблица символов
-
Эта функция вызывает свой аргумент функция для каждого элемента таблицы символов, который имеет значение, отличное от
nil. Вызов функции выполняется с двумя аргументами: ключ и значение. Ключ — это возможный аргумент диапазон дляchar-table-range— либо допустимый символ, либо список пар(from . to), определяющий диапазон символов, которые имеют одинаковое значение. Значение — это то, что возвращает(char-table-range char-table key).В целом пары ключ-значение, передаваемые в функцию, описывают все значения, хранящиеся в таблице символов.
Возвращаемое значение всегда равно
nil; чтобы сделать вызовыmap-char-tableполезными, функция должна иметь побочные эффекты. Например, вот как можно изучить элементы таблицы синтаксиса:(let (accumulator) (map-char-table (lambda (key value) (setq accumulator (cons (list (if (consp key) (list (car key) (cdr key)) key) value) accumulator))) (syntax-table)) accumulator) ⇒ (((2597602 4194303) (2)) ((2597523 2597601) (3)) ... (65379 (5 . 65378)) (65378 (4 . 65379)) (65377 (1)) ... (12 (0)) (11 (3)) (10 (12)) (9 (0)) ((0 8) (3)))
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/Char_002dTables.html