How to bind "rest" variables to list of values in macro in Scheme
- by Slartibartfast
I want to make a helper macro for writing match-extensions. I have something like this:
(define-match-expander my-expander
(? (stx)
(let* ([dat (cdr (syntax-e stx))]
[var1 (car dat))]
[var2 (cadr dat)])
;transformer goes here )))
So I wanted a macro that will do this let binding. I've started with something like this:
(define-syntax-rule (define-my-expander (id vars ...) body)
(define-match-expander id
(? (stx)
(match-let ([(vars ...) (cdr (syntax-e stx))])
body))))
but match-let isn't defined in transformation time.
First question would be is there any other way of doing this (making this expanders, I mean)? Maybe there is already something similar in plt-scheme that I'm not aware of, or I'm doing it wrong in some way.
Regardless of answer on the first question, if I ever want to bound list of variables to list of values inside of a macro, how should I do it?
EDIT: In combination with Eli's answer macro now looks like this:
(define-syntax-rule (define-my-expander (id vars ...) body)
(define-match-expander id
(? (stx)
(syntax-case stx ()
[(_ vars ...)
body]))))