match はこんな感じかな
(define (match kws pat expr)
(define (kwd? p)
(member p kws))
(let loop ((pat pat)
(expr expr)
(res '()))
(cond
((and (pair? pat) (pair? expr))
(let ((res* (loop (car pat) (car expr) res)))
(and res* (loop (cdr pat) (cdr expr) res*))))
((kwd? pat)
(cons (list pat expr) res))
((eqv? pat expr)
res)
(else #f))))