<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">This isn’t so much about interning or gensym (though those are useful when you <i class="">do</i> try to break hygiene). Every syntax object in Racket contains information about its lexical scope, so even identical symbols may not refer to the same bindings since they’re not in the same lexical scope! If my understanding is correct, this is how Racket maintains hygiene with its macros by default.</div><div class=""><br class=""></div><div class="">Now, <font face="Courier" class="">define-syntax-rule</font> <i class="">always</i> maintains hygiene. There is no mechanism to override this. This is probably because breaking hygiene is something to be done with caution, so the easy way to define simple macros give you no way to do it to prevent those newer to the language from ignoring the consequences.</div><div class=""><br class=""></div><div class="">However, note that <font face="Courier" class="">define-syntax-rule</font> is itself a macro that actually just expands to a define-syntax form. There’s nothing “magical” about <font face="Courier" class="">define-syntax-rule</font>, it’s just a handy shorthand.</div><div class=""><br class=""></div><div class="">Fortunately, using define-syntax with things like syntax-case and syntax-parse makes writing more complicated macros relatively painless. The syntax template system along with things like with-syntax make things fairly simple once you wrap your brain around how macros (or more properly, syntax transformers) actually work.</div><div class=""><br class=""></div><div class="">Greg Hendershott has written a wonderful guide on how macros actually work that starts with define-syntax rather than define-syntax-rule to prevent confusion that define-syntax-rule is somehow something special. This guide is called <a href="http://www.greghendershott.com/fear-of-macros/" class="">Fear of Macros</a>  and I’d highly recommend reading it.</div><br class=""><div><blockquote type="cite" class=""><div class="">On Jan 15, 2015, at 00:30, Thomas Lynch <<a href="mailto:thomas.lynch@reasoningtechnology.com" class="">thomas.lynch@reasoningtechnology.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">thank you! ..  of course that makes sense.  I guess that gensym and uninterned symbols have something to do with this?<br class=""><br class="">The identifiers in the macro are 'interned' (is that the terminology? rather than renamed?) so in fact table-auth was never defined.  Then at run time there are complaints as such.  Most all macro expanders work this way, though we might have some way to distinguish which identifiers get munged.<br class=""><br class="">. so is there a simple way to communicate with  define-syntax-rule and tell it not to íntern' certain identifiers in its body? ... '(native table-author ...) or some such? ..  Of course there is always the define-syntax.</div><div class="gmail_extra"><br class=""><div class="gmail_quote">On Thu, Jan 15, 2015 at 3:28 PM, Daniel Prager <span dir="ltr" class=""><<a href="mailto:daniel.a.prager@gmail.com" target="_blank" class="">daniel.a.prager@gmail.com</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="">Hi Thomas <div class=""><br class=""></div><div class="">IIUC you get an error with your original syntax-rules version because syntax-rules (and syntax-case and syntax-parse) is hygienic by default. In this case think of table-author etc. being renamed inside the macro to avoid clashing with variables defined in the calling code. Hence the undefined error in the calling code. </div><div class=""><br class=""></div><div class="">You *want* and expect it to be defined by the macro, but the default behavior says otherwise, and needs to be explicitly over-ridden.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">Dan</div><div class="gmail_extra"><div class=""><div dir="ltr" class=""></div></div>
</div></div>
</blockquote></div><br class=""></div>
____________________<br class="">  Racket Users list:<br class="">  <a href="http://lists.racket-lang.org/users" class="">http://lists.racket-lang.org/users</a><br class=""></div></blockquote></div><br class=""></body></html>