Thanks!
On Fri, May 9, 2014 at 11:33 AM, David Van Horn <dvanh...@cs.umd.edu> wrote: > On 5/9/14, 11:29 AM, Alexander McLin wrote: > > Do you mind expanding on what MTWT stands for? I'm not familiar with this > > paper and am curious. > > Macros that Work Together > http://www.eecs.northwestern.edu/~robby/pubs/papers/jfp2012-fcdf.pdf > > > > On Thu, May 8, 2014 at 6:20 PM, John Clements <cleme...@brinckerhoff.org > >wrote: > > > >> > >> On May 8, 2014, at 3:00 PM, Ryan Culpepper <ry...@ccs.neu.edu> wrote: > >> > >>> IIRC, the typesetting of environment extension might suggest > replacement > >> in a mapping, but I believe it actually means 'cons' in an association > >> list, and 'nostops' is one thing that relies on the latter > implementation > >> of the environment rather than the former. > >> > >> Ah… so the model does in fact have the “uncovering” behavior I expected > it > >> to. In this case, I think that the text of the paper is mistaken; it > says > >> > >> nostops[xi] = {var -> transform | xi(var) = transform and transform != > >> STOP } > >> > >> which certainly suggests to me that these mappings simply wouldn’t > appear > >> in the updated mapping. > >> > >> Amazing how ambiguous formal syntax can be. > >> > >> It seems like the right way to fix this would be to explicitly separate > >> the environment xi into a mapping and a stop list—the ‘nostops’ > definition > >> would be trivial, but lookup in xi would get slightly uglier. Perhaps a > >> footnote somewhere in the paper? > >> > >> Anyway, thanks for clarifying. > >> > >> > >> > >> John > >> > >>> > >>> So an environment with 'lambda' in the stop list actually looks like > >>> > >>> ((lambda STOP) (lambda FUN)) > >>> > >>> so when 'nostops' filters it, it produces > >>> > >>> ((lambda FUN)) > >>> > >>> and the previous meaning of 'lambda' is restored. > >>> > >>> Ryan > >>> > >>> > >>> On 05/08/2014 04:58 PM, John Clements wrote: > >>>> I’m reading through MTWT for the nth time, and this time I have a > >> question about the ‘nostops’ metafunction, part of local expansion. > >>>> > >>>> Specifically: ‘nostops’ takes an environment xi, and strips out > >> everything bound to 'STOP’. This prevents the ’STOP’s from an enclosing > >> local expand from being in force in this one. However, it seems to me > that > >> the ’nostops’ metafunction should restore the bindings that were in > place > >> before they were mapped to STOP. More specifically; suppose a > local-expand > >> specifies, say, ‘lambda’ as a STOP. This replaces the mapping from > ‘lambda’ > >> to FUN with a mapping from ‘lambda’ to ’STOP’. Then, a nested > local-expand > >> uses a different stop-list, that doesn’t include ‘lambda’. If I’m > reading > >> the paper correctly, this local expansion would then take place in a > ‘xi’ > >> where there was no binding for lambda at *all*, which would presumably > lead > >> to an error during that expansion. > >>>> > >>>> I checked out the model, to see if this was a typesetting issue, but > it > >> seems pretty clear to me that the model linked to by the paper has > exactly > >> this property; it’s simply filtering the ‘xi’ environment to throw out > >> things that were bound to STOP. > >>>> > >>>> I tried to construct a racket program to illustrate my question, and > >> here’s what I came up with: > >>>> > >>>> #lang racket > >>>> > >>>> (let-syntax ([boring (lambda (stx) (cadr (syntax->list stx)))]) > >>>> > >>>> (let-syntax ([a (lambda (stx) > >>>> (local-expand (cadr (syntax->list stx)) > >>>> 'expression > >>>> (list #'boring)))]) > >>>> (let-syntax ([b (lambda (stx) > >>>> (local-expand (cadr (syntax->list stx)) > >>>> 'expression > >>>> (list)))]) > >>>> (a (b (boring 34)))))) > >>>> > >>>> Unsurprisingly, this evaluated to the “correct” value, 34. This means > >> that either the model doesn’t match Racket, or (more likely) I’m > >> misunderstanding the model. Or possibl > >>>> > >>>> Ah, what the heck; I’ll cc: the whole racket list. I’ll take help > >> wherever I can get it :). > >>>> > >>>> John > >>>> > >>> > >> > >> > >> ____________________ > >> Racket Users list: > >> http://lists.racket-lang.org/users > >> > > > > > > > > ____________________ > > Racket Users list: > > http://lists.racket-lang.org/users > > > > ____________________ > Racket Users list: > http://lists.racket-lang.org/users >
____________________ Racket Users list: http://lists.racket-lang.org/users