如何正确识别标识符?

时间:2012-05-06 21:02:18

标签: scheme racket

我在考虑以下任何一个

  

(define(ID?x)   (符号?x))

说我有以下

  

(定义列表'(添加4 5))

我想简单地检查“add”是否是标识符或关键字。 所以我正在考虑以下

  

(define(ID?x)   (char?x))

我甚至考虑了and条件

  

(define(ID?x)   (和(char?x)(符号?x))

但我的问题是,对于符号,它会采用诸如@

之类的内容

char?方法它不接受具有多个字符的标识符。

这种方法毫无意义。我正在处理一个列表,所以我不相信(string? x)会起作用,因为它会考虑整个列表。 任何建议都会很棒。谢谢!

1 个答案:

答案 0 :(得分:2)

Scheme没有“关键字”的概念(至少不是你所说的类型;像Racket和Guile这样的实现有关键字参数的关键字,如#:foo)。因此,根据我从您的问题中读到的内容,任何以符号形式读取的内容都将在评估时用作标识符。因此,symbol?就足够了。

如果您确实想测试Racket关键字,可以使用keyword?。此类关键字未通过symbol?测试。

-> (symbol? 'foo)
#t
-> (keyword? 'foo)
#f
-> (symbol? '#:foo)
#f
-> (keyword? '#:foo)
#t