| www.delorie.com/gnu/docs/guile/guile_263.html | search |
![]() Buy GNU books! | |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
syntax-rules System
R5RS defines an alternative system for macro and syntax transformations
using the keywords define-syntax, let-syntax,
letrec-syntax and syntax-rules.
The main difference between the R5RS system and the traditional macros of the previous section is how the transformation is specified. In R5RS, rather than permitting a macro definition to return an arbitrary expression, the transformation is specified in a pattern language that
caddr etc.
The last point is commonly referred to as being hygienic: the R5RS
syntax-case system provides hygienic macros.
For example, the R5RS pattern language for the false-if-exception
example of the previous section looks like this:
(syntax-rules ()
((_ expr)
(catch #t
(lambda () expr)
(lambda args #f))))
|
In Guile, the syntax-rules system is provided by the (ice-9
syncase) module. To make these facilities available in your code,
include the expression (use-syntax (ice-9 syncase)) (see section 31.3.2 Using Guile Modules) before the first usage of define-syntax etc. If
you are writing a Scheme module, you can alternatively include the form
#:use-syntax (ice-9 syncase) in your define-module
declaration (see section 31.3.3 Creating Guile Modules).
23.6.1 The syntax-rulesPattern LanguageThe syntax-rulespattern language.23.6.2 Top Level Syntax Definitions Top level syntax definitions. 23.6.3 Local Syntax Definitions Local syntax definitions.
| webmaster donations bookstore | delorie software privacy |
| Copyright © 2003 by The Free Software Foundation | Updated Jun 2003 |