<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Hi Gustavo<div><br></div><div>Thanks for the detailed report. I haven't looked at (or even used!) this code for a _long_ time so it wouldn't surprise me if its broken. I'll see what I can do over the Thanksgiving break.</div><div><br></div><div>regards,</div><div><br><div><div>On Nov 25, 2008, at 7:51 PM, Gustavo wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">The compiler macros for functions disjoin and conjoin are broken. For debugging purposes, I copied the code to a macro to see what was happening.<br><br><span style="font-family: courier new,monospace;">cl-user> (in-package :metatilities)</span><br style="font-family: courier new,monospace;"> <span style="font-family: courier new,monospace;">#<package "METABANG.UTILITIES"></span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">utilities> (defmacro disjoin* (&whole form &rest fns)</span><br style="font-family: courier new,monospace;"> <span style="font-family: courier new,monospace;">  (cond ((every #'(lambda (x) (or (symbolp x) (function-expression-p x))) fns)</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">         (with-unique-names (args)</span><br style="font-family: courier new,monospace;"> <span style="font-family: courier new,monospace;">           `#'(lambda (,args)</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">                (or ,@(mapcar #'(lambda (x) </span><br style="font-family: courier new,monospace;"> <span style="font-family: courier new,monospace;">                                  `(apply ,(extract-head-form x) </span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">                                          ,args)) </span><br style="font-family: courier new,monospace;"> <span style="font-family: courier new,monospace;">                              fns)))))</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">        (t form)))</span><br style="font-family: courier new,monospace;"> <span style="font-family: courier new,monospace;">disjoin*</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">utilities> (macroexpand-1 '(disjoin* #'macro-char-p #'whitespace-p))</span><br style="font-family: courier new,monospace;"> <span style="font-family: courier new,monospace;">#'(lambda (#:|args/1399|)</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">    (or (apply macro-char-p #:|args/1399|) (apply whitespace-p #:|args/1399|)))</span><br style="font-family: courier new,monospace;"> <span style="font-family: courier new,monospace;">t</span><br><br>I realized this bug trying to compile a function - sbcl complained about the variables macro-char-p and whitespace-p not to be defined. That makes me wonder: what is "extract-head-form" doing? It should be usefull only if you did something like:<br> <br><font face="courier new,monospace">(define-compiler-macro disjoin (fn &rest fns)<br>  ...<br>    `(,(extract-head-form x) ,@args)<br>  ...<br>)<br></font><br>I.e., eliminating the funcalls (I saw that somewhere on <a href="http://cliki.net">cliki.net</a> some time ago).And, by the way, I guess that, the way the function disjoin is being defined, I guess there is no way to do this (the argument list is only known in execution time).<br></blockquote></div><br><div> <span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><div>--</div><div>Gary Warren King, metabang.com </div><div>Cell: (413) 559 8738</div><div>Fax: (206) 338-4052</div></span><div>gwkkwg on Skype * garethsan on AIM</div><div><br class="khtml-block-placeholder"></div><div><br class="khtml-block-placeholder"></div></span><br class="Apple-interchange-newline"></span></div></span> </div><br></div></body></html>