lisp - 语法绑定(bind)值必须是关键字 : alpha. 什么意思?

标签 lisp scheme mit-scheme

这是我的小程序:

(let-syntax ((alpha (lambda (x)
                      (list (syntax quote)
                            (list)))))
  (alpha))

然后 guile 执行它,并返回 ()。但是 mit-scheme 输出如下:

;Syntactic binding value must be a keyword: alpha
;To continue, call RESTART with an option number:
; (RESTART 1) => Return to read-eval-print level 1.

为什么?

(我的版本是:Release 9.1 || Microcode 15.3 || Runtime 15.7 || SF 4.41 || LIAR/i386 4.118 || Edwin 3.116)

最佳答案

MIT Scheme 仅提供syntax-rules、语法闭包和用于定义语法转换器的显式重命名。对于后两者,您需要 sc-macro-transformerer-macro-transformer 形式。如果你想使用语法对象,你需要使用支持语法对象的实现(通常带有 syntax-case),例如 RacketGuile .

顺便说一句,即使在具有语法对象的语言中,您的宏定义也可能无法工作,因为您从转换器而不是语法返回列表。此外,您链接到的网页是一个相当古老的标准。您可能想阅读有关宏的最新资源,例如 TSPL4 .

关于lisp - 语法绑定(bind)值必须是关键字 : alpha. 什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13110941/

相关文章:

macros - 什么是方案宏?

lisp - 如何保存 Lisp 编译器的状态?

recursion - lisp 中的递归是否有任何限制?

Scheme 格式错误的特殊形式

list - 如何将 Scheme 中的函数应用于另一个函数返回的参数列表?

linux - 如何在 Ubuntu 8.10 中为 6.001 设置 MIT Scheme

lisp - 与 g 建立同位函数。在 mit 计划中

recursion - Lisp 递归返回 NIL

scheme - 已绑定(bind)?方案中的谓词

lisp - SICP 练习 2.29 困惑