[R6RS] Bawden quasiquote extension
Michael Sperber
sperber at informatik.uni-tuebingen.de
Fri Jun 23 02:26:19 EDT 2006
dyb at cs.indiana.edu writes:
> The syntax-case reference implementation implements the nested quasiquote
> extensions and it does what you say (and I agree) the R5RS mandates.
>
> > (let ([q '((union x y) (list 'sqrt 9))])
> ``(foo ,, at q))
> `(foo (unquote (union x y) (list 'sqrt 9)))
>
> The output would be invalid syntax, as you say, in R5RS and Common Lisp,
> but not with Bawden's quasiquote extensions.
Just to be clear, you're proposing that
(unquote <exp> ...)
gets a list of the values of <exp> ... plugged into the quasiquote
from, right?
I guess that's fine, but it does look a bit strange in that the list
construction with unquote suddenly gets introduced by moving from 1 to
n>1 arguments. I think I would prefer if the unquote were duplicated.
I'm not sure how that relates to "Bawden's quasiquote extensions," as
Alan's expander assumes that there's only one operand to unquote:
(qq-expand '`(foo (unquote (union x y) (list 'sqrt 9))))
=>
(append '(append) (append (list (append '(quote) (append (list (append '(foo) '())) '()))) (append (list (append '(append) (append (list (append '(list) (append (list (append '(union) (append '(x) (append '(y) '())))) '()))) (append (list (append '(quote) (append '(()) '()))) '())))) '())))
(The (sqrt 9) disappears.)
--
Cheers =8-} Mike
Friede, Völkerverständigung und überhaupt blabla
More information about the R6RS
mailing list