Я хочу сделать вспомогательный макрос для написания расширений совпадений. У меня есть что-то вроде этого:
(define-match-expander my-expander
(λ (stx)
(let* ([dat (cdr (syntax-e stx))]
[var1 (car dat))]
[var2 (cadr dat)])
;transformer goes here )))
Итак, я хотел макрос, который будет выполнять привязку let. Я начал с чего-то вроде этого:
(define-syntax-rule (define-my-expander (id vars ...) body)
(define-match-expander id
(λ (stx)
(match-let ([(vars ...) (cdr (syntax-e stx))])
body))))
, но match-let
не определено во время преобразования.
Первый вопрос: есть ли другой способ сделать это (я имею в виду, это расширители)? Может быть, в plt-схеме уже есть что-то похожее, чего я не знаю, или я каким-то образом ошибаюсь.
Независимо от ответа на первый вопрос, если я захочу связать список переменных со списком значений внутри макроса, как мне это сделать?
РЕДАКТИРОВАТЬ: в сочетании с макросом ответа Эли теперь выглядит так:
(define-syntax-rule (define-my-expander (id vars ...) body)
(define-match-expander id
(λ (stx)
(syntax-case stx ()
[(_ vars ...)
body]))))