7 Записи

Цель записей — позволить программистам создавать объекты с новыми типами, которые не встроены в Emacs. Они используются в качестве основы для представлений экземпляров cl-defstruct и defclass.

Внутренне объект записи очень похож на вектор; его слоты можно обращаться с помощью aref, и его можно копировать с помощью copy-sequence. Однако первый слот используется для хранения его типа, возвращаемого type-of. Кроме того, в текущей реализации записи могут иметь не более 4096 слотов, в то время как векторы могут быть намного больше. Как и массивы, записи используют индексацию с нулевым началом: первый слот имеет индекс 0.

Слот типа должен быть символом или дескриптором типа. Если это дескриптор типа, будет возвращено имя символа, обозначающее его тип; Дескрипторы типов. Любой другой тип объекта возвращается как есть.

Печатное представление записей — это «#s», за которым следует список, указывающий содержимое. Первый элемент списка должен быть типом записи. Последующие элементы — это слоты записи.

Чтобы избежать конфликтов с другими именами типов, программы Lisp, определяющие новые типы записей, обычно должны использовать соглашения об именовании пакета, в котором вводятся эти типы записей, для имен типов. Обратите внимание, что имена типов, которые могут потенциально конфликтовать, могут быть неизвестны на момент загрузки пакета, определяющего тип записи; они могут быть загружены в какой-то будущий момент.

Запись считается константой для вычисления: результат ее вычисления — это та же самая запись. Это не вычисляет и даже не проверяет слоты. См. Формы, самовычисляемые.