<div dir="ltr">I have a simple syntax rule:<br><br><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div>  Welcome to Racket v5.2.1.</div><div>  racket@> (define-syntax-rule (with-tables stem body ...)</div><div>    (let(</div><div>          [table-publication (string-append stem "_publication")]</div><div>          [table-author (string-append stem "_author")]</div><div>          [table-bridge-publication-author (string-append stem "_bridge_publication_author")]</div><div>          [table-unique-counters (string-append stem "_unique_counters")]</div><div>          )</div><div>      body ...</div><div>      ))</div><div><br></div></blockquote>Which works fine when I don't reference the environment defined by the let:<br><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><br></div><div>  racket@></div><div>  racket@> (with-tables "x" "hello")</div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div>  "hello"<br></div><div><br></div><div><br></div></blockquote>However when I pass it an identifier corresponding to one of the variables defined in the let:<div><br><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div>  racket@> (with-tables "x" table-author)</div><div>  reference to undefined identifier: table-author</div><div>  stdin::1167: table-author</div><div><br></div></blockquote>The identifier passed in doesn't seem to be part of the local let context, but carried in a different context, or perhaps it was evaluated as an operand.  I didn't expect either of those.  Can someone point me at a description of the expected behavior, or give me a tip here on what is happening and why.<br><br>... in Wolfram language there is a 'Hold' operator for situations like this.  Apparently inside the macro we have to do some evaluation to handle the work of the macro,  is that why the operand is evaluated? <br><br>Thanks in advance for explaining the evaluation/context model here.<br><br>Thomas </div></div>