语法规则表达式本身是否求值为Scheme中的值



在Chibi和CHICKEN中,以下syntax-rules表达式求值为一个过程:

(syntax-rules () ((_) #f))

这只是这些特定实现如何编写的工件吗?Scheme语言规范似乎没有将syntax-rules称为能够求值的值。


更新

似乎这可能取决于Scheme?

从R6RS Spec:

语义:在宏展开时,语法规则的实例通过指定一系列健康的重写规则来计算一个新的宏转换器。宏的关键字与语法规则指定的转换器相关联,它的使用将与s中包含的模式进行匹配,从最左边开始。当找到匹配项时,宏的使用将根据模板进行卫生转录。如果没有找到匹配项,则违反语法。

来自R5RS Spec和R7RS Spec:

语义:语法规则的实例通过指定一系列健康的重写规则来产生一个新的宏转换器。宏的关键字与由syntax-rules指定的转换器相关联时,将与语法规则中包含的模式进行匹配,从最左边的语法规则开始。当找到匹配项时,宏的使用将根据模板进行卫生转录。

syntax-rules返回转换器,这是扩展器使用的过程,用于将一个语法扩展转换为另一个语法扩展。参见这里。

所以,不,它不是一个特殊的形式(这已经从你的问题中消失了),是的,它计算为一个值,因为Scheme具有一级过程,因此过程是值。

这是Scheme的标准行为,而不是Chicken或Chibi的实现细节。

相关内容

  • 没有找到相关文章

最新更新