Bigloo makes use of two macro expansion system. The one based on the
expansion passing style [Dybvig et al. 86] and the one advocated
by the R5RS, for which see 
http://www-sop.inria.fr/indes/fp/Bigloo/doc/r5rs.html.
| 24.1 Expansion passing style macros
 | 
| 
This form defines an expander,| define-expander name proc | bigloo syntax |  name, whereprocis a procedure of two arguments: a form to macro-expand,
and an expander. | 
| 
This form is itself macro-expanded into a| define-macro (name [args]...) body | bigloo syntax |  define-expanderform.
 Macro expanders cannot be exported or imported since there is no way
to specify expanders in a module declaration.
 
 Macros defined with
 define-expanderanddefine-macroare used by both the compiler and the interpreter. | 
Here is an example of an expander:
| (define-expander when 
   (lambda (x e)
      (match-case x
         ((?- ?test . ?exps)
          (e `(if ,test (begin ,@exps)) e))
         (else
           (error "when" "illegal form" x)))))
 (when (> a 0) (print a) a)
   ==> (if (> a 0) (begin (print a) a))
 | 
The same example can written with a 
define-macro form:
| (define-macro (when test . exps)
   `(if ,test (begin ,@exps)))
 | 
 
| 24.2 Revised(5) macro expansion
 | 
Bigloo support the Revised(5) Report on the Scheme programming language.
For a detailed documentation see See 
r5rs, Expressions.
| 
| let-syntax (binding...) body | syntax |  
| letrec-syntax (binding...) body | syntax |  
| define-syntax keyword transformer | syntax |  
These three forms are compatible with the description of the
Revised(5) Report on the Algorithmic Language Scheme.| syntax-rules literals rule... | syntax |  
 Implementation Note: Current Bigloo does not ensure hygiene for
 let-syntaxandletrec-syntax. Hygienic expansion is
only guaranteed fordefine-syntax. |