You are right, I misunderstood everything from syntax object to free-identifier=? and bound-identifier=? .
Thank you for explaining it so nicely also for the references , I will read them soon. Veer. On Sun, Apr 10, 2011 at 4:53 PM, Marco Maggi <marco.maggi-i...@poste.it> wrote: > Veer wrote: >> I am unable to understand how free-identifier=? and >> bound-identifier=? works? > [...] >> When I use them ,they both produces #t . > > You are misunderstanding the meaning of the function names; > you may try to read [1] which is an annotated section from > the R6RS standard. > > However, your true misunderstanding is to think that > identifiers in the input form of a macro transformer have a > "meaning", for example LET is a binding syntax; they have > not: identifiers in an input form are just identifiers, they > do not affect the binding of other identifiers. In your > example: > > (check (lambda (x y) (let ([x 2]) x))) > > the identifiers LAMBDA and LET in the input form of the use > of CHECK are "just identifiers", they do not influence X in > any way; only if you put into the output form of CHECK they > may behave like the syntaxes of the language (if they are > in the correct position). > > Also notice that your CHECK macro (as I understand it) > does not do what you want to do; to do what you want to do > you should (notice the use of #` and #,): > > #!r6rs > (import (rnrs)) > > (define-syntax check > (lambda (stx) > (syntax-case stx (lambda let) > [(_ (lambda (x y ...) (let ([a b]) c))) > #`(values #,(free-identifier=? #'x #'c) > #,(bound-identifier=? #'x #'c))]))) > > (let-values (((r1 r2) > (check (lambda (x y) (let ([x 2]) x))))) > (write (list r1 r2)) > (newline)) > > HTH > > [1] > <http://marcomaggi.github.com/docs/nausicaa.html/stdlib-syntax_002dcase-identifier.html> > > P.S. It takes time understand this stuff; also, some people > think that FREE-IDENTIFIER=? and BOUND-IDENTIFIER=? are an > unfortunate choice of names, which induces misunderstanding. > -- > Marco Maggi > _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/users