Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scheme R7RS small中的有效标识符是什么?_Scheme_R7rs - Fatal编程技术网

Scheme R7RS small中的有效标识符是什么?

Scheme R7RS small中的有效标识符是什么?,scheme,r7rs,Scheme,R7rs,R7RS small表示所有标识符都必须以分隔符结尾,但同时它定义了非常复杂的规则,用于定义标识符中可以包含的内容。那么,是哪一个呢 标识符应该以一个初始字符开始,然后继续到一个分隔符,还是以一个初始字符开始,然后按照7.1.1中定义的语法继续 这里有几个明显的例子。这些是有效的标识符吗 a#a b,b c'c d[d] 如果它们不应该是有效的,那么说明标识符必须以分隔符结尾的目的是什么呢?|…ident..是R7R中符号的分隔符,允许在旧式符号中插入任何字符(是分隔符) 然而,在R6RS中

R7RS small表示所有标识符都必须以分隔符结尾,但同时它定义了非常复杂的规则,用于定义标识符中可以包含的内容。那么,是哪一个呢

标识符应该以一个初始字符开始,然后继续到一个分隔符,还是以一个初始字符开始,然后按照7.1.1中定义的语法继续

这里有几个明显的例子。这些是有效的标识符吗

  • a#a
  • b,b
  • c'c
  • d[d]

如果它们不应该是有效的,那么说明标识符必须以分隔符结尾的目的是什么呢?

|…ident..
是R7R中符号的分隔符,允许在旧式符号中插入任何字符(
是分隔符)

然而,在R6RS中,这是不正确的,因为它不允许定义符号,例如
1+
,这导致所有实现都定义自己的规则来克服官方语法的这种疾病

除非您需要阅读给定实现的源代码并了解它如何定义符号,否则您不应该太在意这些规则并使用经典符号

在中,您可以找到定义R7RS标识符词汇结构的backus naur表单,但我怀疑实现是否遵循它

我引述

与标识符一样,Scheme的不同实现也会稍微使用 不同的规则,但通常情况下 不包含特殊字符且以 不能以数字开头的字符被视为符号


换句话说,一个实现将使用像ReadAtom这样的函数,然后通过回溯ReadNumber和if number对原子进行分类?如果失败,它将是一个符号。

可能目的是一个有效的标识符后面必须有一个分隔符,否则它是无效的。处理scheme语法的一个想法也是google for read atom。这是一个非标准化的lisp函数,由实现内部使用,用于更广泛地读取符号、数字和原子,之后它将尝试通过在数字、符号等中回溯原子来进行分类。我还编辑了我的答案。我想了解规范的意图,如果我想做一个新的R7RS实现。为什么会说“不以垂直线开头的标识符以垂直线结尾?”⟨分隔符⟩" 同时为标识符提供不同的语法?除了语法说明之外,有效标识符还必须由分隔符终止吗?@TzvetanMikov语法类在7.1.1中定义,正如我已经告诉过的——它由空格、(,)、”等组成。。。。如果您不熟悉7.1中的这种表示法,那么在尝试r7rs实现之前,您应该从简单的事情开始。更好地尝试r4rs的实现。我非常熟悉这个符号,谢谢,但它不明确。应该能够仅从文本中派生行为,而不参考现有的实现。如果遵循语法,则无需使用分隔符终止标识符。除了语法之外,是否还要应用分隔符规则?具体来说,我在问题中给出的示例是如何解析的,比如“a,a”?“,”不是分隔符,但它不是或不是分隔符的一部分。@TzvetanMikov我现在查看了r7rs语法。它与r6rs语法有相同的问题--
1+
在r7rs中也不是有效的符号(因为
1
不属于类
)。但是所有的实现都定义了自己的规则,使得一些符号是有效的。因此,对于您的特定符号,您需要查阅您感兴趣的实现的源代码。@TzvetanMikov您的示例中没有一个不是官方语法中的有效标识符,如果您看到在某些实现中它们是有效的,则实现不遵循官方定义,