小编Chr*_*ris的帖子

Scheme中的宏和内部定义

在Freenode的#scheme频道上提出了一个很好的问题.请考虑以下Scheme中的代码:

(define alpha 1)

(define-syntax foo
  (syntax-rules (quote alpha)
    ((_ alpha msg) (define bar 2))
    ((_ other msg) (syntax-error msg)) ) )

(define (beta)
  (foo alpha "beta")
  (define alpha 3)
  'beta )

(define (gamma)
  (define alpha 4)
  (foo alpha "gamma")
  'gamma )

(define (delta alpha)
  (foo alpha "delta")
  'delta )
Run Code Online (Sandbox Code Playgroud)

的哪些beta,gamma以及delta应产生语法错误?并?我已经用Chibi Scheme检查了这个问题,一切beta都很好gamma而且delta失败了.我想知道这是预期的行为还是仅仅是赤壁的一个错误.

根据标准,似乎扩展宏应该在内部定义被重写之前发生letrec*.所以,beta并且gamma都应该失败,因为foo它将与内部定义匹配alpha,而不是全局定义.

但是,标准中没有明确规定内部定义实际上是如何工作的,只是它们 …

macros scheme r7rs

5
推荐指数
1
解决办法
199
查看次数

标签 统计

macros ×1

r7rs ×1

scheme ×1