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

时间:2014-06-24 17:06:06

标签: scheme chicken-scheme language-specifications chibi-scheme

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

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

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

<小时/> 更新

这似乎取决于Scheme的版本?

From the R6RS Spec

  

语义:语法规则的实例在宏扩展时通过指定一系列卫生重写规则来评估新的宏转换器。使用与其关键字相关联的宏由syntax-rules指定的转换器与s中包含的模式匹配,从最左边开始。当找到匹配时,根据模板卫生地转​​录宏用途。如果找不到匹配项,则会违反语法。

来自R5RS SpecR7RS Spec

  

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

1 个答案:

答案 0 :(得分:4)

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

所以不,它不是一种特殊的形式(在此期间它已经从你的问题中消失了),是的,它评估为一个值,因为Scheme有first-class procedures,因此过程就是值。

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