Ah, right, I know why it is impossible. At the point of compilation of the lambda macro doesnt exists yet. Duh. Sorry about that.<br><div class="gmail_extra"><br><br><div class="gmail_quote">2012/12/11 Peter Enerccio <span dir="ltr"><<a href="mailto:enerccio@gmail.com" target="_blank">enerccio@gmail.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Ah, thank you. I guess that was the problem, I didn't think about the local definition, since technically, you can define function and use it right away in the same local code. I will have to think how to remedy it, I suppose.<br>

<br>The reason why there is in-package is strange, because I don't know what does in-package do in ecl, but if the in-package is not there, the results are undefined (for instance when there is unbound symbol, it will not report the error as condition, for instance) thus I left it there, even though it has zero technical meaning, because there is no reading involved at that point.<br>

<br>As for the reason why, it's because the whole code there is compiled into function which is then called at later time in different thread.<br>Results are like this then: <a href="http://img15.hostingpics.net/pics/864433capture1355165935.png" target="_blank">http://img15.hostingpics.net/pics/864433capture1355165935.png</a> <br>

<div class="gmail_extra"><br><br><div class="gmail_quote"><div class="im">2012/12/11 Juan Jose Garcia-Ripoll <span dir="ltr"><<a href="mailto:juanjose.garciaripoll@gmail.com" target="_blank">juanjose.garciaripoll@gmail.com</a>></span><br>

</div><div><div class="h5"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_extra"><div>On Tue, Dec 11, 2012 at 12:58 AM, Peter Enerccio <span dir="ltr"><<a href="mailto:enerccio@gmail.com" target="_blank">enerccio@gmail.com</a>></span> wrote:<br>

<div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<div>Macrolet will make possible to do local macros, which are fine, but this is not what I meant. <br>What I wanted is to define macros "safely", because the code is evaluated in different thread with safe symbols, thus it is first saved <br>




as lazy function. <br></div></blockquote></div><br></div>You can define a global macro. You cannot apply it in the same form which defines it because it is a local form. Note that this has nothing to do with ECL, but with your understanding of Common Lisp.</div>



<div class="gmail_extra"><br></div><div class="gmail_extra"><br></div><div class="gmail_extra"><span style="font-family:arial,sans-serif;font-size:13px">(LAMBDA ()</span></div><div class="gmail_extra"><span style="font-family:arial,sans-serif;font-size:13px">  ;; Mistake 1. Assume that the forms below change the package</span></div>



<div class="gmail_extra"><span style="font-family:arial,sans-serif;font-size:13px">  ;; and that the IN-PACKAGE form will affect the DEFMACRO</span></div><div><div class="gmail_extra"><span style="font-family:arial,sans-serif;font-size:13px">  (LET ((CORE::P *PACKAGE*) (CORE:THIS #<a GAME:CUBE>))</span></div>



</div><div class="gmail_extra">    ;; This IN-PACKAGE does nothing because none of what follows</div><div class="gmail_extra">    ;; uses the value of *package*<div><br><span style="font-family:arial,sans-serif;font-size:13px">    (IN-PACKAGE ANCA)</span><br style="font-family:arial,sans-serif;font-size:13px">



<span style="font-family:arial,sans-serif;font-size:13px">    (HANDLER-CASE</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">     (UNWIND-PROTECT</span><br style="font-family:arial,sans-serif;font-size:13px">



<span style="font-family:arial,sans-serif;font-size:13px">         (PROGN</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">          (PROGN</span></div>

</div>

<div class="gmail_extra"><div><span style="font-family:arial,sans-serif;font-size:13px">           (DEFMACRO ANCA::RUNNABLE (&BODY ANCA::BODY)</span><br style="font-family:arial,sans-serif;font-size:13px">
<span style="font-family:arial,sans-serif;font-size:13px">             (SI:QUASIQUOTE (LAMBDA () (SI:UNQUOTE-SPLICE ANCA::BODY))))</span><br style="font-family:arial,sans-serif;font-size:13px"></div>

         ;; MISTAKE 2: Assume that RUNNABLE can be used right after DEFMACRO</div><div class="gmail_extra">         ;; This is not possible because this is in a LAMBDA<div><br><span style="font-family:arial,sans-serif;font-size:13px">           ((ANCA::RUNNABLE (PRINT "Ahoj")))))</span><br style="font-family:arial,sans-serif;font-size:13px">



<span style="font-family:arial,sans-serif;font-size:13px">       (SETF *PACKAGE* CORE::P))</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">     (T (CORE::X)</span><br style="font-family:arial,sans-serif;font-size:13px">



<span style="font-family:arial,sans-serif;font-size:13px">      (FUNCALL</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">       #<bytecompiled-closure #<bytecompiled-function 00000000032387d0>></span><br style="font-family:arial,sans-serif;font-size:13px">



<span style="font-family:arial,sans-serif;font-size:13px">       #<a GAME:CUBE></span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">       CORE::X)))</span><br style="font-family:arial,sans-serif;font-size:13px">



<span style="font-family:arial,sans-serif;font-size:13px">    T))</span></div></div><div class="gmail_extra"><br></div><div class="gmail_extra">If you want to define a macro, evaluate a form that defines it. This changes the global status of your Lisp and the macro will be available to further forms which are evaluated later.</div>



<div class="gmail_extra"><br></div><div class="gmail_extra">(defun define-my-macro ()</div><div class="gmail_extra">   (defmacro foo (a) `(print ,a)))</div><div class="gmail_extra"><br></div><div class="gmail_extra">This is a perfectly fine code. If you run</div>



<div class="gmail_extra"><br></div><div class="gmail_extra">(define-my-macro)</div><div class="gmail_extra"><br></div><div class="gmail_extra">it will define the macro. And now you can type</div><div class="gmail_extra">


<br>
</div><div class="gmail_extra">(foo 2)</div><div class="gmail_extra"><br></div><div class="gmail_extra">and this will be translated to (print 2). That's all.</div><div class="gmail_extra"><br></div><div class="gmail_extra">



But really, I do not understand what you want to achieve with the code above and I think you need to learn more Common Lisp before just trying to run any code.</div><div class="gmail_extra"><br></div><div class="gmail_extra">



Juanjo</div><span><font color="#888888"><div class="gmail_extra"><div><br></div>-- <br>Instituto de Física Fundamental, CSIC<br>c/ Serrano, 113b, Madrid 28006 (Spain) <br><a href="http://juanjose.garciaripoll.googlepages.com" target="_blank">http://juanjose.garciaripoll.googlepages.com</a><br>




</div>
</font></span></blockquote></div></div></div><br><br clear="all"><div class="im"><br>-- <br>Bc. Peter Vaňušanik<br><a href="http://www.bishojo.tk" target="_blank">http://www.bishojo.tk</a><br><br>
</div></div>
</blockquote></div><br><br clear="all"><br>-- <br>Bc. Peter Vaňušanik<br><a href="http://www.bishojo.tk" target="_blank">http://www.bishojo.tk</a><br><br>
</div>