On this page:
==
match?
as
object
Version: 5.2

23 Match

Sam Tobin-Hochstadt <samth@ccs.neu.edu>

 (require unstable/match)

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

(== val comparator)
(== val)
A match expander which checks if the matched value is the same as val when compared by comparator. If comparator is not provided, it defaults to equal?.

Examples:

> (match (list 1 2 3)
    [(== (list 1 2 3)) 'yes]
    [_ 'no])

'yes

> (match (list 1 2 3)
    [(== (list 1 2 3) eq?) 'yes]
    [_ 'no])

'no

> (match (list 1 2 3)
    [(list 1 2 (== 3 =)) 'yes]
    [_ 'no])

'yes

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

(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

(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>.

(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