В 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.

Другие вопросы по тегам