Lisp`characterp`每次都返回nil

时间:2018-10-24 15:01:21

标签: lisp common-lisp

我有一个程序,想检查列表中的哪些元素是字符。 但是,我永远无法将characterp谓词设为T

此代码段的输出为NIL

(print (characterp 'c))

我目前的理论是c不是字符,而是不是数字或符号的原子。如果我使用了不合适的谓词,那么当我传递“字符”时哪个谓词可以帮助我返回T,否则可以帮助我返回NIL

2 个答案:

答案 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