On Jul 27, 2014, at 1:20 PM, Roman Klochkov <[email protected]> wrote:
> It is bound to racket/base lambda. More correct, phase0 lambda in racket/base. > But when you call it in level 2, there are no level 0 lambda. > > Minimal similar test-case: > --------------- > (module m racket/base > (provide test-stx) > ;; what you need here is this: (require (for-template racket/base)) > (define (test-stx) #'(lambda (x) x))) > > (require (for-syntax 'm)) > > (define-syntax (test stx) (test-stx)) > > test > Then it works fine. But since #λ is a reader extension, not a macro, it could be at any phase level. I was wondering if there’s any way to construct an identifier that would be bound to lambda from racket/base no matter what phase level it’s referenced at. These examples with macros only have to make sure that it’s there at the for-template phase level relative to test-stx. A reader extension doesn’t have that constraint. > > . lambda: unbound identifier; > also, no #%app syntax transformer is bound in: lambda > ---------------- > > Minimal correct case: > ------------------ > (module m racket/base > (provide test-stx) > (define (test-stx a l) > (with-syntax ([#%app a] > [lambda l]) > #'(lambda (x) x)))) > > (require (for-syntax 'm)) > > (define-syntax (test stx) (test-stx #'#%app #'lambda)) > > test > -------------------- > > So you have to somehow give correct #'lambda and #'#%app into your macros. > > > Sun, 27 Jul 2014 12:21:36 -0400 от "Alexander D. Knauth" > <[email protected]>: > > I just tried to try it and see if it worked, when I realized that it won’t > work because I can’t use quote-syntax. > > Is there any way to get around that? And would it even work anyway? > > On Jul 27, 2014, at 6:59 AM, Roman Klochkov <[email protected]> wrote: > >> Maybe via "Cross-Phase Persistent Module Declarations" >> http://docs.racket-lang.org/reference/syntax-model.html#%28part._cross-phase._persistent-grammar%29 >> ? >> >> >> Thu, 24 Jul 2014 21:24:20 -0400 от "Alexander D. Knauth" >> <[email protected]>: >> How can I make an identifier that will have a certain binding no matter what >> phase level it's referenced at? >> >> For example if I’m making a reader extension that will produce a lambda >> expression, how do I make it so that the lambda expression will be able to >> exist at any phase level? >> >> For example this program using #lang rackjure doesn’t work: >> #lang rackjure >> (require (for-meta 1 racket/base) >> (for-meta 2 racket/base) >> (for-meta 3 racket/base) >> (for-meta 4 racket/base) >> ) >> >> >> #λ(* 2 %) ; works, produces approx. (lambda (%) (* 2 %)) >> (begin-for-syntax >> (begin-for-syntax >> #λ(* 2 %) ; lambda: unbound identifier at phase 2; >> ; ; also, no #%app syntax transformer is bound in: lambda >> )) >> >> Is there any way to construct an identifier that would be bound to lambda >> from racket/base no matter what phase level it’s used in? >> >> >> ____________________ >> Racket Users list: >> http://lists.racket-lang.org/users >> >> >> >> -- >> Roman Klochkov > > > > -- > Roman Klochkov
____________________ Racket Users list: http://lists.racket-lang.org/users

