<span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px; border-collapse: collapse; "><div>Hi</div><div><br></div><div>I run the following test to have a first idea about with-match-destruc performance</div>
<div><br></div><div><br></div><div>? (time (dotimes (i 1000000) (with-match-destruc (a (s x) d) '(a (s 42) d))))</div><div>;Compiler warnings :</div><div>;   In an anonymous lambda form: Unused lexical variable D</div>
<div>;   In an anonymous lambda form: Unused lexical variable #:G2479</div><div>;   In an anonymous lambda form: Unused lexical variable X</div><div>;   In an anonymous lambda form: Unused lexical variable #:G2482</div><div>
;   In an anonymous lambda form: Unused lexical variable S</div><div>;   In an anonymous lambda form: Unused lexical variable A</div><div>(DOTIMES (I 1000000) (WITH-MATCH-DESTRUC (A (S X) D) '(A (S 42) D))) took 33 milliseconds (0.033 seconds) to run </div>
<div>                    with 2 available CPU cores.</div><div>During that period, 33 milliseconds (0.033 seconds) were spent in user mode</div><div>                    0 milliseconds (0.000 seconds) were spent in system mode</div>
<div>NIL</div><div>? (time (dotimes (i 1000000) (unify::unify '(a (s 42) d) '(a (s 42) d))))</div><div>(DOTIMES (I 1000000) (IT.UNIMIB.DISCO.MA.CL.EXT.DACF.UNIFICATION:UNIFY '(A (S 42) D) '(A (S 42) D))) took 3,365 milliseconds (3.365 seconds) to run </div>
<div>                    with 2 available CPU cores.</div><div>During that period, 3,303 milliseconds (3.303 seconds) were spent in user mode</div><div>                    38 milliseconds (0.038 seconds) were spent in system mode</div>
<div>76 milliseconds (0.076 seconds) was spent in GC.</div><div> 40,000,000 bytes of memory allocated.</div><div>NIL</div><div>? (let ((sum 0))</div><div>(time (dotimes (i 1000000) (with-match-destruc (a (s x) d) '(a (s 42) d) (incf sum x))))</div>
<div>sum)</div><div>;Compiler warnings :</div><div>;   In an anonymous lambda form inside an anonymous lambda form: Unused lexical variable A</div><div>;   In an anonymous lambda form inside an anonymous lambda form: Unused lexical variable S</div>
<div>;   In an anonymous lambda form inside an anonymous lambda form: Unused lexical variable #:G2502</div><div>;   In an anonymous lambda form inside an anonymous lambda form: Unused lexical variable #:G2499</div><div>;   In an anonymous lambda form inside an anonymous lambda form: Unused lexical variable D</div>
<div>(DOTIMES (I 1000000) (WITH-MATCH-DESTRUC (A (S X) D) '(A (S 42) D) (INCF SUM X))) took 36 milliseconds (0.036 seconds) to run </div><div>                    with 2 available CPU cores.</div><div>During that period, 36 milliseconds (0.036 seconds) were spent in user mode</div>
<div>                    0 milliseconds (0.000 seconds) were spent in system mode</div><div>42000000</div><div><br></div><div><br></div><div>Kind regards</div><div>Taoufik</div></span><br><div class="gmail_quote">On Mon, Dec 6, 2010 at 11:38 PM, Daniel Weinreb <span dir="ltr"><<a href="mailto:dlw@itasoftware.com">dlw@itasoftware.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">


  

<div bgcolor="#ffffff" text="#000000">
Greg,<br>
<br>
This may be of no importance, but: unification is<br>
a very powerful mechanism.  If one is using<br>
cl-unification to do simple things like<br>
what defmacro does, is it reasonably fast?<br>
<br>
-- Dan<br>
<br>
Greg Pfeil wrote:
<blockquote type="cite"><div><div></div><div class="h5">
  <pre>On 4 Dec 2010, at 8:02, Taoufik Dachraoui wrote:

  </pre>
  <blockquote type="cite">
    <pre>Hello

I wrote a matching pattern function and would like to share in order
to improve it (remove the compiler warnings for example, see below).

I started with the destruc function found in onLisp book by Paul Graham.
    </pre>
  </blockquote>
  <pre>I don't recall if it has any type restrictions, but I tend to use CL Unification (<a href="http://common-lisp.net/project/cl-unification/" target="_blank">http://common-lisp.net/project/cl-unification/</a>) for pattern matching stuff.

  </pre>
  <blockquote type="cite">
    <pre>Any matching symbol x can be typed  and must be of the form (:type x #'name)
where name is a boolean function with one argument (eg. numberp, consp, symbolp, 
atom, ...)
    </pre>
  </blockquote>
  </div></div><pre>Why not have the form be (:type var typename), like (:type x '(integer 0 9))? Then you get much finer control without having to define unary functions for every type you care about. Should be able to just replace (funcall ,(third pat) (car ,seq)) with (typep (car ,seq) ,(third pat)) and you're golden.
_______________________________________________
Openmcl-devel mailing list
<a href="mailto:Openmcl-devel@clozure.com" target="_blank">Openmcl-devel@clozure.com</a>
<a href="http://clozure.com/mailman/listinfo/openmcl-devel" target="_blank">http://clozure.com/mailman/listinfo/openmcl-devel</a>
  </pre>
</blockquote>
</div>

</blockquote></div><br>