At Wed, 21 Jan 2015 13:04:11 +0000, Reuben Thomas wrote: > Since I have a lot of slides like this, I want to write a macro. I tried: > > #lang slideshow > > (require slideshow/step) > > (define-syntax-rule (correct from to) > (lt-superimpose > ((vonly before) (t from)) > ((vonly after) (t to)))) > > (void > (with-steps > (before after) > (slide > (correct "With" "By")))) > > but I get the error: > > vonly: unbound identifier in module in: vonly > > I've experimented with various types of quoting and unquoting, and tried > define-simple-macro instead of define-syntax-rule, but I'm forced to admit > I don't know what I'm doing! > > I know that vonly is special and is bound non-hygienically inside the scope > of the with-steps; how do I reference it correctly in a macro?
You're right that the essential problem is that `with-steps` introduces binding no-hygienically. Non-hygienic macros don't compose nicely. If `with-steps` were written in modern Racket, then it would be hygienic, where `vonly`, etc., are bindings that take their meaning as syntax parameters from an enclosing `with-steps`. Fortunately, it's possible to implement a more modern `with-steps` using the existing one. Use the enclosed "new-step.rkt" in place of `slideshow/step`, and then your `correct` macro will work.
new-step.rkt
Description: Binary data
____________________ Racket Users list: http://lists.racket-lang.org/users