Символьная-таблица очень похожа на вектор, за исключением того, что она индексируется кодами символов. Любой допустимый код символа без модификаторов может использоваться как индекс в символьной-таблице. Вы можете обращаться к элементам символьной-таблицы с помощью aref и aset, как и с любым массивом. Кроме того, символьная-таблица может иметь дополнительные слоты для хранения дополнительных данных, не связанных с конкретными кодами символов. Как и векторы, символьные-таблицы являются константами при вычислении и могут содержать элементы любого типа.
Каждая символьная-таблица имеет подтип — символ, который служит двум целям:
display-table, а синтаксические таблицы — символьными-таблицами с подтипом syntax-table. Подтип можно узнать с помощью функции char-table-subtype, описанной ниже.
char-table-extra-slots подтипа (см. Свойства символов), значение которого должно быть целым числом от 0 до 10. Если у подтипа нет такого свойства символа, символьная-таблица не имеет дополнительных слотов.
Символьная-таблица может иметь родителя — другую символьную-таблицу. Если она его имеет, то всякий раз, когда символьная-таблица задаёт nil для конкретного символа c, она наследует значение, заданное в родителе. Иными словами, (aref char-table c) возвращает значение из родителя char-table, если сама char-table задаёт nil.
Символьная-таблица может также иметь значение по умолчанию. В этом случае (aref char-table c) возвращает значение по умолчанию всякий раз, когда символьная-таблица не задаёт никакого другого значения, отличного от nil.
Возвращает новую символьную-таблицу с подтипом subtype (символ). Каждый элемент инициализируется значением init, которое по умолчанию равно nil. Нельзя изменить подтип символьной-таблицы после её создания.
Нет аргумента для указания длины символьной-таблицы, поскольку все символьные-таблицы имеют место для любого допустимого кода символа в качестве индекса.
Если subtype имеет свойство символа char-table-extra-slots, оно определяет количество дополнительных слотов в символьной-таблице. Это должно быть целое число от 0 до 10; в противном случае make-char-table вызывает ошибку. Если subtype не имеет свойства символа char-table-extra-slots (см. Списки свойств), символьная-таблица не имеет дополнительных слотов.
Эта функция возвращает t, если object является символьной-таблицей, и nil в противном случае.
Эта функция возвращает символ подтипа char-table.
Не существует специальной функции для доступа к значениям по умолчанию в символьной-таблице. Для этого используйте char-table-range (см. ниже).
Эта функция возвращает родителя char-table. Родитель всегда либо nil, либо другая символьная-таблица.
Эта функция устанавливает родителя char-table в new-parent.
Эта функция возвращает содержимое дополнительного слота n (с нуля) символьной-таблицы char-table. Количество дополнительных слотов в символьной-таблице определяется её подтипом.
Эта функция сохраняет value в дополнительный слот n (с нуля) символьной-таблицы char-table.
Символьная-таблица может задавать значение элемента для одного кода символа; она также может задавать значение для целого набора символов.
Возвращает значение, заданное в char-table для диапазона символов range. Возможные значения range:
nilОтносится к значению по умолчанию.
Относится к элементу для символа char (если char является допустимым кодом символа).
(from . to)Ячейка cons относится ко всем символам в включающем диапазоне ‘[from..to]’. В этом случае функция возвращает значение для символа, заданного from.
Эта функция устанавливает значение в char-table для диапазона символов range. Возможные значения range:
nilОтносится к значению по умолчанию.
tОтносится ко всему диапазону кодов символов.
Относится к элементу для символа char (если char является допустимым кодом символа).
(from . to)Ячейка cons относится ко всем символам в включающем диапазоне ‘[from..to]’.
Эта функция вызывает свой аргумент function для каждого элемента char-table, имеющего ненулевое (nil) значение. Вызов function выполняется с двумя аргументами: ключом и значением. Ключ является возможным аргументом range для char-table-range — либо допустимый символ, либо ячейка cons (from . to), задающая диапазон символов, имеющих одинаковое значение. Значение — это то, что возвращает (char-table-range char-table key).
В целом, пары ключ-значение, передаваемые в function, описывают все значения, хранящиеся в char-table.
Возвращаемое значение всегда равно nil; чтобы вызовы map-char-table были полезны, function должна иметь побочные эффекты. Например, вот как просмотреть элементы синтаксической таблицы:
(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)))