25. Bigloo The Programming Language (4.6a) User manual for version 4.6a January 2025 -- Macro expansion

main page

top: | Bigloo The Programming Language (4.6a) User manual for version 4.6a January 2025

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-sop.inria.fr/indes/fp/Bigloo/doc/r5rs.html.

### 25.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)))

### 25.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 Mon Jan 27 07:55:49 2025.