3

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

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

这只是这些特定实现如何编写的产物吗?Scheme 语言规范似乎没有要求syntax-rules能够评估为一个值。


更新

看来这可能取决于 Scheme 的版本?

来自 R 6 RS 规范

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

来自R 5 RS 规范R 7 RS 规范

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

4

1 回答 1

4

syntax-rules返回一个转换器,它是扩展器用来将一个语法扩展转换为另一个语法扩展的过程。另请参见此处

所以不,它不是一种特殊形式(同时这已经从您的问题中消失了),是的,它评估为一个值,因为 Scheme 具有一流的程序,因此程序是值。

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

于 2014-06-24T17:56:23.823 回答