Символы

Системные свойства символа

  С символом или с его именем могут быть связаны значение, определение метода, класса и вектор свойств. Кроме этого, с символом могут быть связаны разные данные, смотря в каком пространстве имён это рассматривать.
  Для чтения и проверки значений различных системных свойств существуют свои предикаты и функции.

Значениеboundp
Классgetclass
Методgetmethod
Свойстваget

Обращение с внешним видом символа

  Внешний вид (имя) символа можно изучить, превратив его в строку, например, функцией string, которая возвращает в качестве значения строку имени атома:

>('H2O string)
"h2o"

  Имя можно разбить на знаки, составив из них список с помощью функцией list:

>(('H2O string) list)
(#\h #\2 #\o)

  В новой форме представления можно работать с одиночными знаками, с ними можно осуществлять вычисления и строить из них новые символы. Это необходимо, например, для работы со словами естественного языка.
  Для создания символа можно использовать функцию symbol, которая включает в систему, вносит в список объектов и в пространство имён символ с именем, заданным строкой.

>("C2H5OH" symbol)
c2h5oh

GENSYM создаёт новый символ

  Для создания символов можно использовать и лисповский генератор символов (symbol gensym), который может порождать новые символы. Имя символа составляется из задаваемого начального символа и из порядкового номера порождаемого символа в качестве суффикса:

>('символ- gensym)
символ-1
>('символ- gensym)
символ-2
>(nil gensym)
t3
; t - начало по умолчанию

  Гарантируется, что возвращаемый функцией символ всегда является новым: если, например, символ символ-2 был бы по какой-нибудь причине уже в списке объектов, то gensym возвратил бы в качестве значения символ символ-3 (если бы он не был уже в употреблении).