Есть ли в Common Lisp (SBCL) способ исследовать отдельные части атома?

Например, если бы у меня был атом «ABCD», есть ли способ определить отдельные символы, составляющие атом?


person kachilous    schedule 11.09.2012    source источник


Ответы (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