DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

(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