21 lines
442 B
Racket
21 lines
442 B
Racket
#lang racket/base
|
|
|
|
(require racket/match (for-syntax racket/base))
|
|
|
|
(provide == match? as)
|
|
|
|
(define-match-expander
|
|
==
|
|
(lambda (stx)
|
|
(syntax-case stx ()
|
|
[(_ val comp)
|
|
#'(? (lambda (x) (comp val x)))]
|
|
[(_ val) #'(== val equal?)])))
|
|
|
|
(define-syntax-rule (match? e p ...)
|
|
(match e [p #t] ... [_ #f]))
|
|
|
|
(define-match-expander as
|
|
(syntax-rules ()
|
|
[(as ([x e] ...) p ...) (and (app (lambda (y) e) x) ... p ...)]))
|