7.7
18 Match
NOTE: This library is deprecated; use racket/match, instead.
(require unstable/match) | package: unstable-lib |
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:
The subsequent bindings were added by Asumu Takikawa <asumu@racket-lang.org>.
syntax
(match*? (val-expr ...) (pat ...) ...)
Similar to match?, but uses match* and accepts
multiple val-expr and corresponding pat in each
clause to match on.
Examples:
> (match*? (1 2 3) (a b c) (x #f z)) #t
> (match*? (1 2 3) (a (? odd?) c) (x y z)) #t
> (match*? (#f #f #f) (1 2 3) (4 5 6)) #f
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