On Oct 16, 2012, at 7:16 PM, Eli Barzilay wrote: > 20 minutes ago, J. Ian Johnson wrote: >> I have a syntax parameter that is bound to a transformer. I want to >> (at certain points) change the parameterization of this parameter to >> a new transformer that depends on the old one. >> >> I can't do this: >> #'(syntax-parameterize ([p (syntax-parser >> [pat (some-combination-of (syntax-parameter-value >> #'p) pat))])]) >> blah) >> >> Because the value fetched is the inner most one, but I want what it >> is currently. > > So you need to grab it outside of the new tansformer, just like with > plain parameters and closures.
just like with plain parameters? that doesn't sound right to me: #lang racket (define p (make-parameter 3)) (parameterize ([p (+ 1 (p))]) (p )) … produces 4. That is, the rhs of the parameter-binding is not in the extent of the new binding. Am I misunderstanding you? John > > > #lang racket/base > > ;; for fun > (require (for-syntax racket/base) racket/stxparam) > (define-syntax-parameter foo #'0) > (define-syntax (the-foo stx) > #`'#,(syntax-parameter-value #'foo)) > (define-syntax (foo-add stx) > (syntax-case stx () > [(_ stuff body ...) > #`(syntax-parameterize ([foo #'(stuff #,(syntax-parameter-value #'foo))]) > body ...)])) > the-foo > (foo-add 1 (foo-add 2 the-foo)) > > ;; IIUC, this is what you want > (define-syntax-parameter bar (λ (stx) #'0)) > (define-syntax (bar-add stx) > (syntax-case stx () > [(_ stuff body ...) > (let* ([cur (syntax-parameter-value #'bar)] > [new (λ (stx) #`(stuff #,(cur stx)))]) > #`(syntax-parameterize ([bar #,new]) > body ...))])) > bar > (bar-add add1 (bar-add list bar)) > > -- > ((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay: > http://barzilay.org/ Maze is Life! > > ____________________ > Racket Users list: > http://lists.racket-lang.org/users
smime.p7s
Description: S/MIME cryptographic signature
____________________ Racket Users list: http://lists.racket-lang.org/users