我想寫一個define
的包裝,它存儲傳遞給它的值。我一直以嬰兒的方式接近它(一般來說對Lisp來說是新手,對於Scheme來說更新),但卻遇到了困難。套!全球從計劃宏嗎?
球拍,我開始有:
> (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特定語法。