Things are getting a bit clearer. Thank you all for your time and patience with stubborn learners ;)<br>Laurent<br><br><div class="gmail_quote">On Sun, Jan 10, 2010 at 08:17, Eli Barzilay <span dir="ltr">&lt;<a href="mailto:eli@barzilay.org">eli@barzilay.org</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 class="im">On Jan  9, Laurent wrote:<br>
&gt;<br>
&gt; For the sake of it, here it is (yes, with `apply&#39;):<br>
</div>&gt; [...]<br>
<br>
So, as I suspected, your problem was independent of `defmacro&#39;, and<br>
doing this exercise would have made that clear.<br>
<div class="im"><br>
<br>
&gt; My main problem is that `syntax-rules&#39;, `syntax-case&#39;, `with-syntax&#39;<br>
&gt; and others that I have not used yet use the syntax in quite<br>
&gt; different ways, and sometimes you have to #&#39; and sometimes you have<br>
&gt; to (syntax-&gt;datum ....) and sometimes not. I have a hard time to<br>
&gt; know when to use the right one at the right time (the docs are a bit<br>
&gt; obscure on these points).  Whereas in `defmacro&#39;, I know exactly<br>
&gt; when to use `quote&#39; and `unquote&#39;.<br>
<br>
</div>Using `define-syntax&#39; is practically the same -- it just uses syntax<br>
objects instead of &quot;plain&quot; datums.  This means that there&#39;s an extra<br>
layer to dig through if you want to do some games like create your own<br>
identifiers -- and this extra layer is needed because it&#39;s how you get<br>
complete control over the lexical scope of the macro results.<br>
`defmacro&#39; is kind of like throwing plain symbols around and hoping<br>
that the scope will be right -- and in almost all cases the scope is<br>
only partially right.<br>
<br>
[It takes a while to run into cases where it&#39;s not right -- and once<br>
you get burned by that you gain important insight on why hugiene is<br>
important.  As someone pointed out earlier, the fact that the defmacro<br>
version uses whatever `define&#39; happens to be in the scope of the macro<br>
use is a good example for that -- all it takes is a language with<br>
different semantics for `define&#39;, and the `defmacro&#39; version will fall<br>
apart in surprisingly hard to debug ways.]<br>
<div class="im"><br>
<br>
&gt; Wouldn&#39;t it be possible to define &quot;safe&quot; quotes and unquotes for<br>
&gt; syntax macros, without having to go from syntax to datum and<br>
&gt; vice-versa at weird places? [...]<br>
<br>
</div>I don&#39;t think so.  (And like Matthias said, if there is some way to do<br>
that, it hasn&#39;t been discovered yet.)<br>
<br>
This is also relevant here:<br>
<br>
  <a href="http://blog.plt-scheme.org/2009/05/explicit-renaming-macros-implicitly.html" target="_blank">http://blog.plt-scheme.org/2009/05/explicit-renaming-macros-implicitly.html</a><br>
<div><div></div><div class="h5"><br>
--<br>
          ((lambda (x) (x x)) (lambda (x) (x x)))          Eli Barzilay:<br>
                    <a href="http://barzilay.org/" target="_blank">http://barzilay.org/</a>                   Maze is Life!<br>
</div></div></blockquote></div><br>