Subject: Re: Dynamic unquote ( , )?
From: rpw3@rpw3.org (Rob Warnock)
Date: Fri, 10 Feb 2006 00:17:02 -0600
Newsgroups: comp.lang.lisp
Message-ID: <7ZOdnX-3aNdDsnHeRVn-sQ@speakeasy.net>
Brian Downing  <see-signature@lavos.net> wrote:
+---------------
| Rob Warnock <rpw3@rpw3.org> wrote:
| > Ooooh! Look at that loverly idiosyncratic environment! How is my
| > QUASIQUOTE macro expander going to extract the values of FILE & FLAGS
| > from *that* in a portable way??!?!?
| > 
| > [Cue Duane Rettig, waiting in the wings for an encore presentation
| > of his Environments Access module...  ;-}  ;-}  ]
| 
| I don't think you need to.  You're outputting a macroexpander.  It will
| get evaluated in the lexical context of the let, so you just need to
| reference the variables....
...
| If you had a QUASIQUOTE expander that'd just be putting a QUASIQUOTE
| around the command form.
...
| (defmacro quasiquote (args)
|   (process-qq args))
+---------------

Good point. You do need to completely macroexpand the effective
or implicit (RUN macro generated) QUASIQUOTE form & subforms before
emitting any function calls, but that said, it *is* possible.[1]

Good to know, thanks!

"CLsh", anyone...?  ;-}


-Rob

[1] Well, one still has to usurp the built-in readmacros for `/,/,@
    with something like Alexander Schmolck's code [and make sure
    that doesn't break something else!], but at least the simple
    cases can be made to work.

-----
Rob Warnock			<rpw3@rpw3.org>
627 26th Avenue			<URL:http://rpw3.org/>
San Mateo, CA 94403		(650)572-2607