▼ |  | Unstable: May Change Without Warning

1 | Guidelines for Developing unstable Libraries
2 | Automata: Compiling State Machines
3 | Bytes
4 | Contracts
5 | Converting Values to Strings
6 | Contracts for Macro Subexpressions
7 | Debugging
8 | Definitions
9 | Filesystem
10 | Find
11 | Flonums
12 | Futures
13 | Functions
14 | Hash Tables
15 | Interface-Oriented Programming for Classes
16 | Lazy Require
17 | Lists
18 | Logging
19 | Mark Parameters
20 | Match
21 | Parameter Groups
22 | Pretty-Printing
23 | Sequences
24 | Strings
25 | Structs
26 | Syntax
27 | Temporal Contracts: Explicit Contract Monitors
28 | GUI Libraries

On this page:

match?
as
object

Version: 5.3
top← prev up next →

### 20`` Match

This library is unstable; compatibility will not be maintained. See Unstable: May Change Without Warning for more information.

(require unstable/match)

> > > The subsequent bindings were added by Carl Eastlund <cce@racket-lang.org>.

> syntax (match? val-expr pat ...)

Returns #t if the result of val-expr matches any of pat, and returns #f otherwise.

Examples:
> > (match? (list 1 2 3)
> (list a b c)
> (vector x y z))
> #t
> > (match? (vector 1 2 3)
> (list a b c)
> (vector x y z))
> #t
> > (match? (+ 1 2 3)
> (list a b c)
> (vector x y z))
> #f

> syntax (as ([lhs-id rhs-expr] ...) pat ...)

As a match expander, binds each lhs-id as a pattern variable with the result value of rhs-expr, and continues matching each subsequent pat.

Example:
> > (match (list 1 2 3)
> [(as ([a 0]) (list b c d)) (list a b c d)])
> '(0 1 2 3)

> > > The subsequent bindings were added by Asumu Takikawa <asumu@racket-lang.org>.

> syntax (object maybe-class field-clause ...)
> maybe-class |  | = |  |
> |  | | |  | class-expr
> field-clause |  | = |  | (field field-id maybe-pat)
> maybe-pat |  | = |  |
> |  | | |  | pat

A match expander that checks if the matched value is an object and contains the fields named by the field-ids. If pats are provided, the value in each field is matched to its corresponding pat. If a pat is not provided, it defaults to the name of the field.

If class-expr is provided, the match expander will also check that the supplied object is an instance of the class that the given expression evaluates to.

Examples:
> (define point%
> (class object%
> (super-new)
> (init-field x y)))
> > (match (make-object point% 3 5)
> [(object point% (field x) (field y))
> (sqrt (+ (* x x) (* y y)))])
> 5.830951894845301
> > (match (make-object point% 0 0)
> [(object (field x (? zero?))
> (field y (? zero?)))
> 'origin])
> 'origin
> > (match (make-object object%)
> [(object (field x) (field y))
> 'ok]
> [_ 'fail])
> 'fail

top← prev up next →