我在考虑以下任何一个
(define(ID?x) (符号?x))
说我有以下
(定义列表'(添加4 5))
我想简单地检查“add”是否是标识符或关键字。 所以我正在考虑以下
(define(ID?x) (char?x))
我甚至考虑了and
条件
(define(ID?x) (和(char?x)(符号?x))
但我的问题是,对于符号,它会采用诸如@
和char
?方法它不接受具有多个字符的标识符。
这种方法毫无意义。我正在处理一个列表,所以我不相信(string? x)
会起作用,因为它会考虑整个列表。
任何建议都会很棒。谢谢!
答案 0 :(得分:2)
Scheme没有“关键字”的概念(至少不是你所说的类型;像Racket和Guile这样的实现有关键字参数的关键字,如#:foo
)。因此,根据我从您的问题中读到的内容,任何以符号形式读取的内容都将在评估时用作标识符。因此,symbol?
就足够了。
如果您确实想测试Racket关键字,可以使用keyword?
。此类关键字未通过symbol?
测试。
-> (symbol? 'foo)
#t
-> (keyword? 'foo)
#f
-> (symbol? '#:foo)
#f
-> (keyword? '#:foo)
#t