R6RS syntax-case macros
E571519
R6RS syntax-case macros are a powerful, hygienic macro system for Scheme that allows pattern-based source code transformation with full access to the language for expressing complex compile-time logic.
Statements (49)
| Predicate | Object |
|---|---|
| instanceOf |
Scheme macro system
ⓘ
hygienic macro system ⓘ macro system ⓘ |
| allows | controlled breaking of hygiene when needed ⓘ |
| basedOn | syntax-case system by R. Kent Dybvig ⓘ |
| category | metaprogramming facility ⓘ |
| contrastsWith | R5RS syntax-rules macros ⓘ |
| definedIn | Revised^6 Report on the Algorithmic Language Scheme NERFINISHED ⓘ |
| definedInStandard | R6RS NERFINISHED ⓘ |
| designedFor |
maintaining referential transparency of macros
ⓘ
writing complex macros ⓘ |
| enables |
abstraction over binding constructs
ⓘ
compile-time optimization transformations ⓘ definition of high-level language constructs ⓘ definition of new control structures ⓘ definition of new module-like abstractions ⓘ embedding of domain-specific languages in Scheme ⓘ |
| ensures | macro hygiene by default ⓘ |
| hasCoreForm |
identifier-syntax
ⓘ
syntax ⓘ syntax-case ⓘ syntax-object constructors and accessors ⓘ syntax-rules (R6RS variant) ⓘ syntax-violation ⓘ with-syntax ⓘ |
| moreExpressiveThan | R5RS syntax-rules macros NERFINISHED ⓘ |
| programmingLanguage | Scheme ⓘ |
| provides |
access to lexical context of syntax objects
ⓘ
explicit control over macro hygiene ⓘ pattern language for destructuring syntax ⓘ support for phased libraries and macro expansion phases ⓘ template language for constructing syntax ⓘ |
| scope | compile-time ⓘ |
| standardizedInYear | 2007 ⓘ |
| supports |
arbitrary Scheme code at macro expansion time
ⓘ
compile-time computation ⓘ context-sensitive macros ⓘ error reporting with source locations ⓘ hygienic macro expansion ⓘ identifier renaming to avoid capture ⓘ lexical scoping preservation ⓘ macro-generating macros ⓘ macro-introduced bindings ⓘ pattern-based source transformation ⓘ syntax pattern matching ⓘ template-based code generation ⓘ |
| uses |
guards (fenders) for additional matching conditions
ⓘ
pattern variables in syntax-case clauses ⓘ syntax objects to represent code with lexical context ⓘ |
Referenced by (1)
Full triples — surface form annotated when it differs from this entity's canonical label.