Lisp’овые символы является объектами данных, которые имеют три
элемента, видимых для пользователя:
- Список свойств является списком, который позволяет хранить в
символе именованные изменяемые данные.
- Выводимое имя должно быть строкой,
которая является последовательностью букв, идентифицирующей
символ. Символы несут большую пользу, так как они могут быть
обозначены просто заданным именем (например, напечатанным на
клавиатуре). Выводимое имя изменять нельзя.
- Ячейка пакета должна ссылаться на объект пакета. Пакет
является структурой данных, используемой для группирования
имен символов. Символ уникально идентифицируется по имени,
только когда рассматривается относительно пакета. Символ может
встречаться в нескольких пакетах, но родительским пакетом
может быть как максимум только один. Ячейка пакета ссылается
на родительский пакет, если он есть. Ячейки пакетов обсуждаются
в главе 11.
Символ может также содержать другие элементы, которые используются
реализацией. Ещё одна важная функция, это использование символов в
качестве имен переменных. Желательно, чтобы разработчик использовал
такие элементы символа для реализации семантики переменных. Смотрите
symbol-value и symbol-function. Однако, существует несколько
стратегий реализации, и такие возможные элементы символов здесь не
описаны.