С символом или с его именем могут быть связаны значение, определение метода, класса и вектор свойств. Кроме этого, с символом могут быть связаны разные данные, смотря в каком пространстве имён это рассматривать.
Для чтения и проверки значений различных системных свойств существуют свои предикаты и функции.
Значение | boundp |
Класс | getclass |
Метод | getmethod |
Свойства | get |
Внешний вид (имя) символа можно изучить, превратив его в строку, например, функцией string, которая возвращает в качестве значения строку имени атома:
>('H2O string)
"h2o"
Имя можно разбить на знаки, составив из них список с помощью функцией list:
>(('H2O string) list)
(#\h #\2 #\o)
В новой форме представления можно работать с одиночными знаками, с ними можно осуществлять вычисления и строить из них новые символы. Это необходимо, например, для работы со словами естественного языка.
Для создания символа можно использовать функцию symbol, которая включает в систему, вносит в список объектов и в пространство имён символ с именем, заданным строкой.
>("C2H5OH" symbol)
c2h5oh
Для создания символов можно использовать и лисповский генератор символов (symbol gensym), который может порождать новые символы. Имя символа составляется из задаваемого начального символа и из порядкового номера порождаемого символа в качестве суффикса:
>('символ- gensym)
символ-1
>('символ- gensym)
символ-2
>(nil gensym)
t3 ; t - начало по умолчанию
Гарантируется, что возвращаемый функцией символ всегда является новым: если, например, символ символ-2 был бы по какой-нибудь причине уже в списке объектов, то gensym возвратил бы в качестве значения символ символ-3 (если бы он не был уже в употреблении).