(require mzlib/match) |
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.
(match val-expr clause ...)
clause = [pat expr ...+] | [pat (=> id) expr ...+]
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 |
(match-lambda clause ...)
(match-lambda* clause ...)
(match-let ([pat expr] ...) body ...+)
(match-let* ([pat expr] ...) body ...+)
(match-letrec ([pat expr] ...) body ...+)
(match-define pat expr)
(define-match-expander id proc-expr) (define-match-expander id proc-expr proc-expr) (define-match-expander id proc-expr proc-expr proc-expr)
(match-equality-test) → (any/c any/c . -> . any) (match-equality-test comp-proc) → void? comp-proc : (any/c any/c . -> . any)