On this page:
match
define/ match
match-lambda
match-lambda*
match-let
match-let*
match-letrec
match-define
define-match-expander
match-equality-test

 (require mzlib/match)

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.