[racket] tutorial: exploring the boundaries of outer space
On Apr 11, 2012, at 11:09 AM, Danny Yoo wrote:
>> This problem still remains in your newest version of `def', since as a user of `m' I still need to know that it uses `def' internally.
>
> Oh! I thought I designed the revised outer so that it should be
> agnostic to how 'm' works.
Sorry about that! I confused myself with a toy test case while looking at it. I'll have to explore a little further to see how it works. This one still seems a little confusing to me:
(define-syntax m3
(syntax-rules ()
((_ id val)
(let ()
(def (h id)
(def (g id)
val)
(g id))
(h 2)))))
(def (g x)
(def (h x)
(m3 x (outer x)))
(h 5))
-> "compile: unbound identifier (and no #%top syntax transformer is bound) in: x"
By the way, this doesn't seem to work, since the body ends up in a `syntax' form:
(def (f x)
(define-syntax m3
(syntax-rules ()
((_ id body ...)
(begin
(def (id x)
(m2 (outer x)))
body ...))))
(m3 g (g 2)))
--
Brian Mastenbrook
brian at mastenbrook.net
http://brian.mastenbrook.net/