▼ |  | Syntax: Meta-Programming Helpers

1 | Parsing and Specifying Syntax
2 | Syntax Object Helpers
3 | Datum Pattern Matching
4 | Module-Processing Helpers
5 | Macro Transformer Helpers
6 | Reader Helpers
7 | Parsing for Bodies
8 | Source Locations
9 | Preserving Source Locations
10 | Non-Module Compilation And Expansion
11 | Trusting Standard Recertifying Transformers
12 | Attaching Documentation to Exports
| Index

On this page:

datum-case
datum
with-datum
quasidatum
undatum
undatum-splicing

Version: 5.3.1
top ← prev up next →

### 3`` Datum Pattern Matching

( require syntax/datum )

The syntax/datum library provides forms that implement the pattern and template language of syntax-case, but for matching and constructing datum values instead of syntax.

For most pattern-matching purposes, racket/match is a better choice than syntax/datum. The syntax/datum library is useful mainly for its template support (i.e., datum) and, to a lesser extent, its direct correspondence to syntax-case patterns.

> > syntax

> > ( datum-case datum-expr (literal-id ...)
> > clause ...)

> > syntax

> > ( datum template)

Like syntax-case and syntax, but datum-expr in datum-case should produce a datum (i.e., plain S-expression) instead of a syntax object to be matched in clauses, and datum similarly produces a datum. Pattern variables bound in each clause of datum-case are accessible via datum instead of syntax. When a literal-id appears in a clause’s pattern, it matches the corresponding symbol (using eq?).

Using datum-case and datum is essentially equivalent to converting the input to syntax-case using datum->syntax and then wrapping each use of syntax with syntax->datum, but datum-case and datum to not create intermediate syntax objects.

Example:

> > ( datum-case '(1 "x" -> y) ( -> )
> [(a ... -> b) ( datum (b ( + a) ... ))])

> '(y (+ 1) (+ "x"))

> > syntax

> > ( with-datum ([pattern datum-expr] ...)
> > body ...+)

Analogous to with-syntax, but for datum-case and datum instead of syntax-case and syntax.

Example:

> > ( with-datum ([(a ... ) '(1 2 3)]
> [(b ... ) '("x" "y" "z")])
> ( datum ((a b) ... )))

> '((1 "x") (2 "y") (3 "z"))

> > syntax

> > ( quasidatum template)

> > syntax

> > ( undatum expr)

> > syntax

> > ( undatum-splicing expr)

Analogous to quasisyntax, unsyntax, and unsyntax-splicing.

Example:

> > ( with-datum ([(a ... ) '(1 2 3)])
> ( quasidatum (( undatum ( - 1 1)) a ... ( undatum ( + 2 2)))))

> '(0 1 2 3 4)

top ← prev up next →