The mzlib/match library provides a match form similar to that of scheme/match, but with an different (older and less extensible) syntax of patterns.
(match val-expr clause )  | ||||||||||
  | ||||||||||
  | 
See match from scheme/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  | 
  | |
  | |
  | |
  | |
  | |
  | 
Analogous to the combined forms from scheme/match.
  | |||
  | 
Analogous to the form and parameter from scheme/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.