R7RS small表示所有标识符都必须以分隔符结束,但同时它为标识符中的内容定义了非常详细的规则。那么,是哪一个呢?
标识符应该以初始字符开头,然后继续到分隔符,还是以初始字符开始,然后按照7.1.1中定义的语法继续。
以下是几个明显的案例。这些标识符是否有效?
a#a
b,b
c'c
d[d]
如果它们不应该是有效的,那么说标识符必须由分隔符终止的目的是什么?
|..ident..|
是R7RS中符号的分隔符,允许在旧式符号中插入任何无法插入的字符(|
是分隔符(。
然而,在R6RS中,"official"
语法是不正确的,因为它不允许定义1+
这样的符号,这导致所有实现都定义了自己的规则来克服官方语法的这种弊病。
除非你需要阅读给定实现的源代码,看看它是如何定义符号的,否则你不应该太在意这些规则,而应该使用经典符号。
在第7.1.1节中,您可以找到定义R7RS标识符的词汇结构的backus-naur形式,但我怀疑实现是否遵循它
我从这里引用
与标识符一样,Scheme的不同实现略微使用不同的规则,但通常情况下不包含特殊字符且以开头的字符不能以数字开头的字符被视为符号
换句话说,一个实现将使用类似read-atom的函数,然后它将通过使用read-number和if-number进行回溯来对原子进行分类?如果失败,它将成为一个象征。