Re: [Scheme-reports] ANN: first draft of R7RS small language available
Andrzej
(06 May 2011 15:26 UTC)
|
Re: [Scheme-reports] ANN: first draft of R7RS small language available
Jim Rees
(06 May 2011 17:01 UTC)
|
Re: [Scheme-reports] ANN: first draft of R7RS small language available Andrzej (07 May 2011 05:12 UTC)
|
Re: [Scheme-reports] ANN: first draft of R7RS small language available
Andre van Tonder
(07 May 2011 12:56 UTC)
|
Re: [Scheme-reports] ANN: first draft of R7RS small language available
Andrzej
(07 May 2011 14:52 UTC)
|
Re: [Scheme-reports] ANN: first draft of R7RS small language available
Aaron W. Hsu
(07 May 2011 18:51 UTC)
|
Re: [Scheme-reports] ANN: first draft of R7RS small language available
Andrzej
(08 May 2011 04:31 UTC)
|
Re: [Scheme-reports] ANN: first draft of R7RS small language available
Eli Barzilay
(07 May 2011 20:22 UTC)
|
On Sat, May 7, 2011 at 2:00 AM, Jim Rees <jimreesma@gmail.com> wrote: > >> After all the discussion in this thread I'm in favor of (3) (which >> essentially means that UNQUOTE being an identifier). (2) would be the >> behavior with keywords being matched by name. (1) is somewhere in >> between. > > Your (3) is close, but the rationalization: > After all we can rebind anything else just fine: > (let ((+ -)) > `((unquote + (list 1 2)))) => (#<procedure:-> (1 2)) > is unfair, because this example gives UNQUOTE its special meaning (to > QUASIQUOTE) back. A better example would be: > (let ((+ -)) > `((not-so-unquote + (list 1 2)))) Actually this rationalization was wrong for other reason: (let ((+ -)) (quote +)) => + is matching symbols by name, do we want '-' instead? (let ((+ -)) (quasiquote (+ ,+))) => (+ #<procedure:->) is matching quoted symbols by name, do we want (- #<procedure:->) ? (let ((unquote -)) (quasiquote (+ ,+))) => (+ (unquote +)) UNQUOTE is an identifier but it fails to expand, is the desired output: (+ (- +)) ? (let ((- unquote)) (quasiquote (+ (- +))) => syntax error (attempted evaluation of UNQUOTE) do we want (+ <#procedure:+>) ? To me it looks like the above design is not hygienic but fixing it is not as easy as fixing ELSE or => in COND. It requires changing evaluation rules of QUOTE and QUASIQUOTE so that symbols have a chance to be resolved. In case of UNQUOTE and UNQUOTE-SPLICING it is even more complicated. I can't come up with any solution except for expanding the whole QUASIQUOTE form at the evaluation time (which is not going to make compiler implementors happy) In this particular case I think the easiest and the *cleanest* fix would be to make unquote and unquote-splicing reserved words (illegal as identifiers). This is getting a bit too difficult for me. If someone more experienced could shine some light on this issue that would be great. Andrzej _______________________________________________ Scheme-reports mailing list Scheme-reports@scheme-reports.org http://lists.scheme-reports.org/cgi-bin/mailman/listinfo/scheme-reports