Chapter 10

Macros

Auxiliary Rule Sets

Auxiliary rule sets are like subroutines for rewrite rules. An auxiliary rule set rewrites the value of a pattern variable after it is bound by a pattern and before it is substituted into a template. Auxiliary rule sets only come into play after a pattern has matched; the failure of all patterns in an auxiliary rule set to match causes the entire macro call to be declared invalid, rather than back-tracking and trying the next pattern in the calling rule set.

See the definition of aux-rule-sets in Auxiliary Rule Sets on page 430.

A symbol flags the beginning of an auxiliary rule set. For readability it is generally written as name: rather than #"name". The name of the symbol is the same as the name of the pattern variable that is rewritten by this auxiliary rule set. All occurrences of this pattern variable in all rule sets are rewritten. A pattern variable can occur in the very auxiliary rule set that rewrites that pattern variable; this is how you write recursive rewrite rules, which greatly expand the power of pattern-matching.

When an auxiliary rule set's pattern variable occurs in a double question-mark pattern-keyword, the auxiliary rule set rewrites each property value in the sequence individually.

The order of auxiliary rule sets in a macro definition is immaterial.

The ellipsis ... in patterns and templates of an auxiliary rule set means exactly the same thing as the pattern variable that is rewritten by this auxiliary rule set. Using ellipsis instead of the pattern variable can make recursive rewrite rules more readable.