Though also cycle back to us.  I'm curious to hear what he has to say.

Shriram

On Tue, Nov 16, 2010 at 5:13 PM, Robby Findler
<ro...@eecs.northwestern.edu> wrote:
> That expression at the end is somehow turning a procedure back into
> its quoted form. I have no idea if a Scheme that did that would be R5
> or not, but Racket definitely does not allow that (and neither did any
> other programming language that I've ever worked on).
>
> Overall, I'd say, you should contact Aaron directly, instead of asking here.
>
> Robby
>
> On Tue, Nov 16, 2010 at 4:07 PM, John Clements
> <cleme...@brinckerhoff.org> wrote:
>> I'm reading Aaron Stump's "Directly Reflective Meta-Programming," and it 
>> appears to me that either he misunderstands Scheme, or that I misunderstand 
>> it. Are there many Scheme dialects in which his use of quasiquote to embed a 
>> 3d value would successfully pry open the syntactic term?
>>
>> (Excerpt below)
>>
>> Sorry for the OT post,
>>
>> John
>>
>>
>>
>> 2.1.2   Variables in Meta-Programming
>>
>> 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.
>>
>> ((lambda (y) (eval ‘(car (cdr (cdr ’,y))))) (lambda (x) x))
>> _________________________________________________
>>  For list-related administrative tasks:
>>  http://lists.racket-lang.org/listinfo/dev
>>
> _________________________________________________
>  For list-related administrative tasks:
>  http://lists.racket-lang.org/listinfo/dev
_________________________________________________
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/dev

Reply via email to