在Common Lisp(SBCL)中,有没有办法检查原子的各个部分?

时间:2012-09-11 14:10:19

标签: common-lisp sbcl

例如,如果我有原子'ABCD,有没有办法确定构成原子的各个字符?

2 个答案:

答案 0 :(得分:11)

这些角色不是“构成一个原子”(原子是不同的东西;大致上“不是一个列表”)。

你所拥有的是符号。符号有一个名称,通过它可以引用它。您可以使用函数symbol-name

获取符号的名称
CL-USER > (symbol-name 'ABCD)
=> "ABCD"

(请注意,symbol-nameABCD都表示符号,但symbol-name被评估,而ABCD不是由于引用 - 上面的内容与{ {1}}。)

符号还有其他属性,您可以通过函数(symbol-name (quote ABCD))symbol-packagesymbol-plistsymbol-value获取这些属性。

如需概述,请查看chapter 10 of the Hyperspec

答案 1 :(得分:4)

获取符号中的字符列表:

(coerce (string 'ABCD) 'list) ; => (#\A #\B #\C #\D)

如果您首先转换符号,则可以对符号执行任何常规的字符串分析:

(string 'ABCD)                ; => "ABCD"
(char (string 'ABCD) 0)       ; => #\A
(subseq (string 'ABCD) 0 2)   ; => "AB"