Hi,<br><br><div class="gmail_quote">On Sun, Jan 17, 2010 at 15:22, johny seventy <span dir="ltr">&lt;<a href="mailto:johnyseventy@hotmail.com">johnyseventy@hotmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">




<div>
Hi!<br><br>I am trying to learn syntax-rules macros but have some very basic questions regarding manipulation of s-expressions. <br><br>Below is some simple code to illustrate my questions:<br><br>#lang scheme<br><br>(define-syntax foo<br>
  (syntax-rules ()<br>    ((_ (x y))<br>     #t)))<br></div></blockquote><div><br>instead of #t, try to return &#39;(y x), it is more informative.<br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div><br><br>(define sexpr &#39;(a b))<br><br>;; one<br>(foo sexpr)<br><br>;; two<br>(foo &#39;(a b))<br></div></blockquote><div><br>this works because it matches (quote (a b)), so x becomes `quote&#39; and y becomes (a b).<br>
<br><br></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div>;; three<br>(foo (a b))<br><br>;; four<br>(eval `(foo ,sexpr))<br></div></blockquote>
<div><br>For this one, I won&#39;t answer it as I&#39;m not sure myself, but it seems that eval can/must almost always be avoided.<br><br> </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div>So I understand why the first example fails. I am not sure why example two matches as I would only assume example three would. I understand why example four works but is there anyway I can do this without eval?<br><br>
TIA.<br></div></blockquote></div><br>My 2 cents.<br>