<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Well, he's generous about it; here's what he had to say.<div><br></div><div>John</div><div><br><div><br><div>Begin forwarded message:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;"><span style="font-family:'Helvetica'; font-size:medium; color:rgba(0, 0, 0, 1);"><b>From: </b></span><span style="font-family:'Helvetica'; font-size:medium;">Aaron Stump &lt;<a href="mailto:aaron-stump@uiowa.edu">aaron-stump@uiowa.edu</a>&gt;<br></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;"><span style="font-family:'Helvetica'; font-size:medium; color:rgba(0, 0, 0, 1);"><b>Date: </b></span><span style="font-family:'Helvetica'; font-size:medium;">November 16, 2010 5:58:42 PM PST<br></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;"><span style="font-family:'Helvetica'; font-size:medium; color:rgba(0, 0, 0, 1);"><b>To: </b></span><span style="font-family:'Helvetica'; font-size:medium;">John Clements &lt;<a href="mailto:clements@brinckerhoff.org">clements@brinckerhoff.org</a>&gt;<br></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;"><span style="font-family:'Helvetica'; font-size:medium; color:rgba(0, 0, 0, 1);"><b>Subject: </b></span><span style="font-family:'Helvetica'; font-size:medium;"><b>Re: Q. about "Directly Reflective" paper</b><br></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;"><span style="font-family:'Helvetica'; font-size:medium; color:rgba(0, 0, 0, 1);"><b>Reply-To: </b></span><span style="font-family:'Helvetica'; font-size:medium;"><a href="mailto:astump@cs.uiowa.edu">astump@cs.uiowa.edu</a><br></span></div><br><div>Hi, John.<br></div><div><br></div><div>I think you are right about this. &nbsp;Lambda abstractions evaluate to #procedures in Scheme R5RS, and so it is not possible to take a cdr or car of one of these. &nbsp;I have no idea why I wrote this (four years ago -- there was a major lag between acceptance and publication at HOSC). &nbsp;I will add a note to my web page about this, and possibly upload a revised version of the paper without this incorrect statement.</div>
<div><br></div><div>Aaron</div><br><div class="gmail_quote">On Tue, Nov 16, 2010 at 4:18 PM, John Clements <span dir="ltr">&lt;<a href="mailto:clements@brinckerhoff.org">clements@brinckerhoff.org</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">I'm reading your paper, "Directly Reflective Meta-Programming," and I got stuck early on a remark of yours about Scheme:<br>

<br>
&gt; A meta-programming language is scope safe (or hygienic) iff variables may not be captured or escape their scopes during computation. Dynamic variables in Emacs LISP and Common LISP are a good example of a violation of scope safety [30, 24]. Scheme R5RS’s macro language is designed to be scope safe [21]. Other constructs in Scheme R5RS, however, enable violation of scope safety, even though the language does not have dynamic variables. For a violation of scope safety in spirit, though not technically, we have that (caddr ’(lambda (x) x)) evaluates to x. According to the R5RS language definition, ’(lambda (x) x) is a literal expression, and hence the occurrences of x in it are not variables at all, but just (unscoped) literal data. So in this example, a variable has been created (namely, the resulting unquoted x), but not by means of removing it from its scope. Using quasiquotation, however, the example may be modified to give a true violation of scope safety. The following expression extracts the variable x from its scope, by transforming the binding lambda expression into a piece of literal data, and then extracting and evaluating the quoted variable.<br>

<br>
&gt; ((lambda (y) (eval ‘(car (cdr (cdr ’,y))))) (lambda (x) x))<br>
<br>
<br>
This looks pretty goofy to me. &nbsp;Do you know of R5RS implementations that actually allow you to peel apart a 3d value like this? &nbsp;Racket (nee MzScheme) certainly doesn't.<br>
<br>
Thanks!<br>
<font color="#888888"><br>
<br>
John Clements<br>
<br>
</font></blockquote></div><br>
</blockquote></div><br></div></body></html>