【发布时间】:2013-03-21 15:45:54
【问题描述】:
读完this page。我发现很难记住如何使用 define-syntax 代替 define-macro,所以我想在 mit-scheme 中实现 define-macro(或至少找到一些等价物)。
这是我的(有问题的)实现:
(define-syntax define-macro
(rsc-macro-transformer
(let ((xfmr (lambda (macro-name macro-body)
(list 'define-syntax macro-name
(list 'rsc-macro-transformer
(let ((m-xfmr macro-body))
(lambda (e r)
(apply m-xfmr (cdr e)))))))))
(lambda (e r)
(apply xfmr (cdr e))))))
(define-macro my-when
(lambda (test . branch)
(list 'if test (cons 'begin branch))))
(my-when #t
(begin
(display "True")
(newline)))
REPL 抱怨:
;The object (lambda (test . branch) (list (quote if) test (cons (quote begin) branch))) is not applicable.
我是新手,不知道哪里出了问题,有人可以帮我吗?
【问题讨论】:
标签: scheme mit-scheme