我有一个程序,想检查列表中的哪些元素是字符。
但是,我永远无法将characterp
谓词设为T
。
此代码段的输出为NIL
(print (characterp 'c))
我目前的理论是c
不是字符,而是不是数字或符号的原子。如果我使用了不合适的谓词,那么当我传递“字符”时哪个谓词可以帮助我返回T
,否则可以帮助我返回NIL
?
答案 0 :(得分:8)
您的c
是名称为"c"
的符号。此名称是一个包含一个字符的字符串。
在Common Lisp中,字符文字的书写方式类似于#\c
:
(characterp #\c)
⇒ T
如果要问“这是一个名称长度为1的符号吗?”的问题,则需要这样说:
(= 1 (length (symbol-name 'c)))
⇒ T
答案 1 :(得分:4)
我目前的理论是
c
不是字符
您不需要理论。 Lisp供交互式使用,可以告诉您什么。只需询问Lisp有关类型:
CL-USER 11 > (type-of 'c)
SYMBOL
CL-USER 12 > (type-of "c")
SIMPLE-TEXT-STRING
CL-USER 13 > (type-of #\c)
CHARACTER