Hi all - <br><br>I run into a problem that are better explained via the example, but basically I am having difficulty to get syntax-rules&#39; literals and module interactions correct, and need some help understanding where it all goes awry.
<br><br>What I want to do is to write a macro that would match on a sexp that does different things based on the app-position token.&nbsp; The example just prints the sexp out as is without nesting.<br><br>expected behavior:<br>

(m (&lt; 5 10)) ; =&gt; (&lt; 5 10)<br>(m (&gt; 5 10)) ; =&gt; (&gt; 5 10)<br>
<br>So I write a macro like below:<br><br>(define-syntax m<br>&nbsp; (syntax-rules (&gt; &lt;)<br>&nbsp;&nbsp;&nbsp; ((_ (&gt; exp exp2))<br>&nbsp;&nbsp;&nbsp;&nbsp; &#39;(&gt; exp exp2))<br>&nbsp;&nbsp;&nbsp; ((_ (&lt; exp exp2))<br>&nbsp;&nbsp;&nbsp;&nbsp; &#39;(&lt; exp exp2))<br>&nbsp;&nbsp;&nbsp; ))<br><br>

and it works as expected on REPL.<br><br>However, if I put the above into a module and run within REPL, then I ran into bad-syntax error.<br><br>(module foo mzscheme<br>(define-syntax m<br>&nbsp; (syntax-rules (&gt; &lt;)<br>
&nbsp;&nbsp;&nbsp; ((_ (&gt; exp exp2))
<br>&nbsp;&nbsp;&nbsp;&nbsp; &#39;(&gt; exp exp2))<br>&nbsp;&nbsp;&nbsp; ((_ (&lt; exp exp2))<br>&nbsp;&nbsp;&nbsp;&nbsp; &#39;(&lt; exp exp2))<br>&nbsp;&nbsp;&nbsp; ))<br>(provide (all-defined)))<br>(require foo)<br>(m (&lt; 5 10)) ; =&gt; m: bad syntax in: (m (&lt; 5 10))<br>(m (&gt; 5 10)) ; =&gt; m: bad syntax in: (m (&gt; 5 10))
<br><br>But if I eval m in another module instead of REPL, then it seems to work:<br><br>(module foo mzscheme<br>&nbsp; (define-syntax m<br>&nbsp;&nbsp;&nbsp; (syntax-rules (&gt; &lt;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((_ (&gt; exp exp2))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;(&gt; exp exp2))
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((_ (&lt; exp exp2))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#39;(&lt; exp exp2))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ))<br>&nbsp; (provide (all-defined)))<br><br>(module bar mzscheme <br>&nbsp; (require foo)<br>(display (m (&lt; 5 10)))<br>(newline)<br>(display (m (&gt; 5 10))))
<br><br>(require bar) <br>; prints below<br>; (&lt; 5 10)<br>; (&gt; 5 10)<br><br>Any thoughts on why it behaves this way?&nbsp; I guess I lacked some simple understanding here and appreciate the pointers.<br><br>Thanks,<br>yc
<br><br><br>