В Common Lisp (SBCL) есть ли способ проверить отдельные части атома?
Например, если у меня был атом 'ABCD, есть ли способ определить отдельные символы, из которых состоит атом?
2 ответа
Чтобы получить список символов в символе:
(coerce (string 'ABCD) 'list) ; => (#\A #\B #\C #\D)
Вы можете выполнить любой обычный анализ строки для символа, если вы сначала преобразуете его:
(string 'ABCD) ; => "ABCD"
(char (string 'ABCD) 0) ; => #\A
(subseq (string 'ABCD) 0 2) ; => "AB"
Эти символы не "составляют атом" (атом - это нечто иное, грубо говоря, "не список").
То, что у вас есть, это символ. Символ имеет имя, по которому он упоминается. Вы можете получить имя символа с помощью функции 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.