Например, если бы у меня был атом «ABCD», есть ли способ определить отдельные символы, составляющие атом?
Есть ли в Common Lisp (SBCL) способ исследовать отдельные части атома?
Ответы (2)
Чтобы получить список символов в символе:
(coerce (string 'ABCD) 'list) ; => (#\A #\B #\C #\D)
Вы можете выполнить любой обычный строковый анализ символа, если сначала преобразуете его:
(string 'ABCD) ; => "ABCD"
(char (string 'ABCD) 0) ; => #\A
(subseq (string 'ABCD) 0 2) ; => "AB"
person
Jon Gauthier
schedule
11.09.2012
Эти символы не «составляют атом» (атом — это нечто другое, грубо говоря, «не список»).
У вас есть символ. У символа есть имя, по которому на него ссылаются. Вы можете получить имя символа с помощью функции symbol-name
:
CL-USER > (symbol-name 'ABCD)
=> "ABCD"
(Обратите внимание, что и symbol-name
, и ABCD
обозначают символы, но symbol-name
оценивается, тогда как ABCD
не связано с кавычками. Вышеприведенное читается так же, как (symbol-name (quote ABCD))
.)
Символы также имеют другие свойства, которые вы можете получить с помощью функций symbol-package
, symbol-plist
, symbol-value
или symbol-function
.
Обзор можно найти в главе 10 Hyperspec.
person
Svante
schedule
11.09.2012