26 mzlib/match

▼ |  | Mz Lib: Legacy Libraries

1 | mzlib/ a-signature
2 | mzlib/ a-unit
3 | mzlib/ async-channel
4 | mzlib/ awk
5 | mzlib/ class
6 | mzlib/ cm
7 | mzlib/ cm-accomplice
8 | mzlib/ cmdline
9 | mzlib/ cml
10 | mzlib/ compat
11 | mzlib/ compile
12 | mzlib/ contract
13 | mzlib/ control
14 | mzlib/ date
15 | mzlib/ deflate
16 | mzlib/ defmacro
17 | mzlib/ etc
18 | mzlib/ file
19 | mzlib/ for
20 | mzlib/ foreign
21 | mzlib/ include
22 | mzlib/ inflate
23 | mzlib/ integer-set
24 | mzlib/ kw
25 | mzlib/ list
26 | mzlib/ match
27 | mzlib/ math
28 | mzlib/ md5
29 | mzlib/ os
30 | mzlib/ pconvert
31 | mzlib/ pconvert-prop
32 | mzlib/ plt-match
33 | mzlib/ port
34 | mzlib/ pregexp
35 | mzlib/ pretty
36 | mzlib/ process
37 | mzlib/ restart
38 | mzlib/ runtime-path
39 | mzlib/ sandbox
40 | mzlib/ sendevent
41 | mzlib/ serialize
42 | mzlib/ shared
43 | mzlib/ string
44 | mzlib/ struct
45 | mzlib/ stxparam
46 | mzlib/ surrogate
47 | mzlib/ tar
48 | mzlib/ thread
49 | mzlib/ trace
50 | mzlib/ traceld
51 | mzlib/ trait
52 | mzlib/ transcr
53 | mzlib/ unit
54 | mzlib/ unit-exptime
55 | mzlib/ unit200
56 | mzlib/ unitsig200
57 | mzlib/ zip
| Bibliography
| Index

On this page:

match
define/ match
match-lambda
match-lambda*
match-let
match-let*
match-letrec
match-define
define-match-expander
match-equality-test

top ← prev up next →

(require mzlib/match) | package: compatibility-lib

> NOTE: This library is deprecated; use racket/match, instead.

The mzlib/match library provides a match form similar to that of racket/match, but with an different (older and less extensible) syntax of patterns.

> syntax (match val-expr clause ...)
> clause |  | = |  | [pat expr ...+]
> |  | | |  | [pat (=> id) expr ...+]

See match from racket/match for a description of matching. The grammar of pat for this match is as follows:

pat |  | ::= |  | id |  | match anything, bind identifier
|  | | |  | _ |  | match anything
|  | | |  | literal |  | match literal
|  | | |  | 'datum |  | match equal? datum
|  | | |  | (lvp ...) |  | match sequence of lvps
|  | | |  | (lvp ... . pat) |  | match lvps consed onto a pat
|  | | |  | #(lvp ...) |  | match vector of pats
|  | | |  | #&pat |  | match boxed pat
|  | | |  | ($ struct-id pat ...) |  | match struct-id instance
|  | | |  | (and pat ...) |  | match when all pats match
|  | | |  | (or pat ...) |  | match when any pat match
|  | | |  | (not pat ...) |  | match when no pat match
|  | | |  | (= expr pat) |  | match (expr value) to pat
|  | | |  | (? pred-expr pat ...) |  | match if (expr value) and pats
|  | | |  | `qp |  | match quasipattern
literal |  | ::= |  | #t |  | match true
|  | | |  | #f |  | match false
|  | | |  | string |  | match equal? string
|  | | |  | number |  | match equal? number
|  | | |  | character |  | match equal? character
|  | | |  | bytes |  | match equal? byte string
|  | | |  | keyword |  | match equal? keyword
|  | | |  | regexp |  | match equal? regexp literal
|  | | |  | pregexp |  | match equal? pregexp literal
lvp |  | ::= |  | pat |  | greedily match pat instances
|  | | |  | pat |  | match pat
ooo |  | ::= |  | ... |  | zero or more; ... is literal
|  | | |  | ___ |  | zero or more
|  | | |  | ..k |  | k or more
|  | | |  | __k |  | k or more
qp |  | ::= |  | literal |  | match literal
|  | | |  | id |  | match equal? symbol
|  | | |  | (qp ...) |  | match sequences of qps
|  | | |  | (qp ... . qp) |  | match sequence of qps consed onto a qp
|  | | |  | (qp ... qp ooo) |  | match qps consed onto a repeated qp
|  | | |  | #(qp ...) |  | match vector of qps
|  | | |  | #&qp |  | match boxed qp
|  | | |  | ,pat |  | match pat
|  | | |  | ,@pat |  | match pat, spliced

> syntax (define/match (head args) match*-clause ...)
> syntax (match-lambda clause ...)
> syntax (match-lambda* clause ...)
> syntax (match-let ([pat expr] ...) body ...+)
> syntax (match-let* ([pat expr] ...) body ...+)
> syntax (match-letrec ([pat expr] ...) body ...+)
> syntax (match-define pat expr)

Analogous to the combined forms from racket/match.

> syntax (define-match-expander id proc-expr)
> (define-match-expander id proc-expr proc-expr)
> (define-match-expander id proc-expr proc-expr proc-expr)
> parameter (match-equality-test) → (any/c any/c . -> . any)
> (match-equality-test comp-proc) → void?
> comp-proc : (any/c any/c . -> . any)

Analogous to the form and parameter from racket/match. The define-match-expander form, however, supports an extra proc-expr as the middle one: an expander for use with match from mzlib/match.
top ← prev up next →