24. Bigloo A practical Scheme compiler User manual for version 4.0a January 2013 -- Macro expansion

main page
top: | Bigloo A practical Scheme compiler User manual for version 4.0a January 2013
Macro expansion
Chapters
| 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.inria.fr/indes/fp/Bigloo/doc/r5rs.html.
### 24.1 Expansion passing style macros
define-expander name proc | bigloo syntax
This form defines an expander, `name`, where `proc` is a procedure of two arguments: a form to macro-expand, and an expander.
define-macro (name [args]...) body | bigloo syntax
This form is itself macro-expanded into a `define-expander` form. Macro expanders cannot be exported or imported since there is no way to specify expanders in a module declaration. Macros defined with `define-expander` and `define-macro` are 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
syntax-rules literals rule... | syntax
These three forms are compatible with the description of the Revised(5) Report on the Algorithmic Language Scheme. Implementation Note: Current Bigloo does not ensure hygiene for `let-syntax` and `letrec-syntax`. Hygienic expansion is only guaranteed for `define-syntax`.

This Html page has been produced by Skribe.
Last update Thu Jan 24 17:08:36 2013.