You're trying to produce a syntax object containing (quote void).
The printed representation for that would be one of:

     #<syntax (quote void)>
  or (#<syntax quote> . #<syntax (void)>)
  or (#<syntax quote> #<syntax void>)
  or (#<syntax quote> #<syntax void> . #<syntax ()>)

The first time, your macro produced the symbol "quote" (incorrect)
and an identifier "void" like (quote #<syntax void>).  That's not
correct because the quote should be an identifier.

Note that (quote #<syntax void>) can be written as
          (quote #<syntax void> . ())
using explicit pairs.

The second time, you tried to fix it by doing datum->syntax on the
whole (quote #<syntax void> . ()) object.  That produces:
 #<syntax (#<syntax quote> void . #<syntax ()>)>
which is the same as:
(<#syntax #<syntax quote>> #<syntax void> . #<syntax #<syntax ()>>)

So, you fixed the "void" by making it an identifier, but messed up
the things that were correct, like #<syntax quote>, by making it no
longer an identifier, but a syntax object containing an identifier.
Similarly, #<syntax ()> was converted from being a syntax for () to
being a syntax for a syntax for ().  Do you see the difference?

Aziz,,,

Reply via email to