【发布时间】:2011-07-27 11:02:57
【问题描述】:
我正在尝试为define 编写一个包装器,用于存储传递给它的值。我一直在逐步接近它(一般来说是 Lisp 的新手,甚至是 Scheme 的新手),但遇到了障碍。
在 Racket 中,我开始:
> (require (lib "defmacro.ss"))
> (define-macro (mydefine thing definition)
`(define ,thing ,definition))
> (mydefine a 9)
> a
9
好的,这行得通。在返回 s-exprs 之前,是时候在宏中做一些事情了:
> (define-macro (mydefine thing definition)
(display "This works")
`(define ,thing ,definition))
> (mydefine a "bob")
This works
> a
"bob"
很好。但是我一辈子都不能让它设置一个全局变量而不是显示一些东西:
> (define *myglobal* null)
> (define-macro (mydefine thing definition)
(set! *myglobal* "This does not")
`(define ,thing ,definition))
> (mydefine a ":-(")
set!: cannot set identifier before its definition: *myglobal*
任何有关如何完成此任务的建议将不胜感激。
我怀疑我在这里试图逆流而上,要么通过摆弄 Scheme 中宏的全局变量,要么使用 define-macro 而不是学习用于创建宏的 Scheme 特定语法。
【问题讨论】: