[gambit-list] Intermixing syntax-rules and define-macro
lucier at math.purdue.edu
Thu Sep 27 18:42:36 EDT 2012
Here is an example from
;; Common-lisp-style define-macro, implemented on top of syntax-case.
;; Note that this is a macro that generates another macro (with the
;; appropriate name).
;; This is the weirdest one. It...
;; * strips all syntax information out of the incoming s-exp,
;; leaving raw symbols.
;; * runs the result through the transformer function
;; * injects that result back into the original scope
;; * returns the final result for processing
;; Note that because we're generating the *entire* result through
;; DATUM->SYNTAX-OBJECT, we don't need to quote or expand anything
;; with SYNTAX.
((_ (macro . args) . body)
(syntax (define-macro macro (lambda args . body))))
((_ macro transformer)
(syntax (define-syntax (macro stx2)
(let ((v (syntax-object->datum stx2)))
(apply transformer (cdr v))))))))))
Maybe you could use this to redefine Gambit's define-macro.
More information about the Gambit-list