DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH
 

(r5rs.info.gz) Binding constructs for syntactic keywords

Info Catalog (r5rs.info.gz) Macros (r5rs.info.gz) Macros (r5rs.info.gz) Pattern language
 
 4.3.1 Binding constructs for syntactic keywords
 -----------------------------------------------
 
 `Let-syntax' and `letrec-syntax' are analogous to `let' and `letrec',
 but they bind syntactic keywords to macro transformers instead of
 binding variables to locations that contain values.  Syntactic keywords
 may also be bound at top level; see section  Syntax definitions.
 
  -- syntax: let-syntax <bindings> <body>
      _Syntax:_ <Bindings> should have the form
 
      ((<keyword> <transformer spec>) ...,)
 
      Each <keyword> is an identifier, each <transformer spec> is an
      instance of `syntax-rules', and <body> should be a sequence of one
      or more expressions.  It is an error for a <keyword> to appear
      more than once in the list of keywords being bound.
 
      _Semantics:_ The <body> is expanded in the syntactic environment
      obtained by extending the syntactic environment of the
      `let-syntax' expression with macros whose keywords are the
      <keyword>s, bound to the specified transformers.  Each binding of
      a <keyword> has <body> as its region.
 
      (let-syntax ((when (syntax-rules ()
                           ((when test stmt1 stmt2 ...)
                            (if test
                                (begin stmt1
                                       stmt2 ...))))))
        (let ((if #t))
          (when if (set! if 'now))
          if))                               ==>  now
 
      (let ((x 'outer))
        (let-syntax ((m (syntax-rules () ((m) x))))
          (let ((x 'inner))
            (m))))                           ==>  outer
 
 
  -- syntax: letrec-syntax <bindings> <body>
      _Syntax:_ Same as for `let-syntax'.
 
      _Semantics:_  The <body> is expanded in the syntactic environment
      obtained by extending the syntactic environment of the
      `letrec-syntax' expression with macros whose keywords are the
      <keyword>s, bound to the specified transformers.  Each binding of
      a <keyword> has the <bindings> as well as the <body> within its
      region, so the transformers can transcribe expressions into uses
      of the macros introduced by the `letrec-syntax' expression.
 
      (letrec-syntax
        ((my-or (syntax-rules ()
                  ((my-or) #f)
                  ((my-or e) e)
                  ((my-or e1 e2 ...)
                   (let ((temp e1))
                     (if temp
                         temp
                         (my-or e2 ...)))))))
        (let ((x #f)
              (y 7)
              (temp 8)
              (let odd?)
              (if even?))
          (my-or x
                 (let temp)
                 (if y)
                 y)))                        ==>  7
 
 
Info Catalog (r5rs.info.gz) Macros (r5rs.info.gz) Macros (r5rs.info.gz) Pattern language
automatically generated byinfo2html