0

我在想以下任何一个

(定义(ID?x)(符号?x))

说我有以下

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

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

(定义 (ID?x) (char?x))

我什至在考虑and有条件的

(定义 (ID?x) (and (char?x)(symbol?x))

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

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

and 方法没有意义。我正在处理一个列表,所以我认为(string? x)它不会起作用,因为它会考虑整个列表。任何建议都会很棒。谢谢你!

4

1 回答 1

2

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

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

-> (symbol? 'foo)
#t
-> (keyword? 'foo)
#f
-> (symbol? '#:foo)
#f
-> (keyword? '#:foo)
#t
于 2012-05-06T21:07:04.153 回答