<div class="im" style><blockquote class="gmail_quote" style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div style="word-wrap:break-word"><div>In the example that doesn&#39;t work, the first mult is needed for another use of ==&gt;. In the simpler examples, it is not. Notice that the orphaned mult occurs on the second step when another use is expanded, while in the simpler examples another use of ==&gt; does not occur. †In the simple cases, mult is known to the expanded code; in the example that doesn&#39;t work, mult is not known to repeated use of the macro. Another clue is: if you run the test in the interactions window, it works because the definition of mult (in definitions) is automatically provided for interactions.</div>
<div><br></div><div>I haven&#39;t even read your macro; the amazing and amusing macro stepper knows all and tells all.</div><div><br></div></div></blockquote><div><br></div></div><div style>Your comment caused me to think about why the repeated calls to ==&gt; would &#39;mult&#39; to become &quot;unknown&quot;. †Eventually, I realized that the syntax-&gt;datum call was probably doing too much; i.e. it was stripping away too much information so when I built back up the new expression, the binding of &#39;mult&#39; was lost. †</div>
<div style><br></div><div style>At least, that&#39;s my guess. †I think the Racket documentation is fantastic but I find a bit of experimentation is necessary to figure some things out and that&#39;s what I&#39;ve come up with. †(Perhaps an experience macrologist can comment?). †</div>
<div style><br></div><div style>Anyhow, here&#39;s a version that works (er...at least it seems to work so far...):</div><div style><br></div><div style><div class="im" style="color:rgb(80,0,80)"><div>(define-syntax ==&gt;</div>
<div>† (lambda (stx)</div><div>† † (define (replace-in-first exp-list new-val)</div><div>† † † (let* ([new-exp†</div><div>† † † † † † † (map (Ž (x)†</div></div><div>† † † † † † † † † † †(if (eq? (syntax-e x) &#39;_)</div>
<div>† † † † † † † † † † † † †new-val</div><div>† † † † † † † † † † † † †x))</div><div>† † † † † † † † † †(syntax-&gt;list (car exp-list))) ]</div></div>