【发布时间】:2018-09-15 02:03:52
【问题描述】:
测试代码:
(define-syntax (test-d stx)
#'(begin
(define (callme a)
(writeln a))))
(define-syntax (test-e stx)
(datum->syntax stx '(begin
(define (callme2 a)
(writeln a)))))
> (test-d)
> (callme 1)
. . callme: undefined;
cannot reference an identifier before its definition
> (test-e)
> (callme2 1)
1
我不明白 test-d 和 test-e 的区别。在我看来,他们看起来是平等的。不过,callme 没有定义。
甚至宏步进器都说是一样的。
Expansion finished
(module anonymous-module racket
(#%module-begin
(define-syntax (test-d stx)
#'(begin (define (callme a) (writeln a))))
(define-syntax (test-e stx)
(datum->syntax
stx
'(begin (define (callme2 a) (writeln a)))))
(begin (define (callme a) (writeln a)))
(begin (define (callme2 a) (writeln a)))))
我猜test-d 中缺少一些通过test-e 传递到stx 的信息(上下文?)。
我怎样才能实现 callme 也仅使用 #' 定义?
【问题讨论】: