Цель записей — позволить программистам создавать объекты
с новыми типами, которые не встроены в Emacs. Они используются в качестве
основы для представлений экземпляров cl-defstruct и
defclass.
Внутренне объект записи очень похож на вектор; его слоты можно
обращаться с помощью aref, и его можно копировать с
помощью copy-sequence. Однако первый слот используется для
хранения его типа, возвращаемого type-of. Кроме того, в
текущей реализации записи могут иметь не более 4096 слотов, в то время как
векторы могут быть намного больше. Как и массивы, записи используют индексацию
с нулевым началом: первый слот имеет индекс 0.
Слот типа должен быть символом или дескриптором типа. Если это дескриптор типа, будет возвращено имя символа, обозначающее его тип; Дескрипторы типов. Любой другой тип объекта возвращается как есть.
Печатное представление записей — это «#s», за которым следует список, указывающий содержимое. Первый элемент списка должен быть типом записи. Последующие элементы — это слоты записи.
Чтобы избежать конфликтов с другими именами типов, программы Lisp, определяющие новые типы записей, обычно должны использовать соглашения об именовании пакета, в котором вводятся эти типы записей, для имен типов. Обратите внимание, что имена типов, которые могут потенциально конфликтовать, могут быть неизвестны на момент загрузки пакета, определяющего тип записи; они могут быть загружены в какой-то будущий момент.
Запись считается константой для вычисления: результат ее вычисления — это та же самая запись. Это не вычисляет и даже не проверяет слоты. См. Формы, самовычисляемые.