<div>Hi</div><div><br></div><div>I think I found the best way to do it, by using a macro and vector of conses:</div><div><br></div><div>(defvar *y* (make-array 100 :element-type 'cons))</div><div><br></div><div>(defmacro m1 (a) `,(svref *y* a))</div>
<div><br></div><div>(setf (svref *y* 20) '(+ x 1))</div><div><br></div><div>? (time (dotimes (i 10000000) (let ((x 3)) (m1 20))))</div><div>(DOTIMES (I 10000000) (LET ((X 3)) (M1 20))) took 31 milliseconds (0.031 seconds) to run </div>
<div>                    with 2 available CPU cores.</div><div>During that period, 31 milliseconds (0.031 seconds) were spent in user mode</div><div>                    1 milliseconds (0.001 seconds) were spent in system mode</div>
<div>NIL</div><div>? </div><div><br></div><div>The timing is the same as with tagbody/go</div><div><br></div><div>The other solution is to do with a vector of functions but it is 3 times slower but faster than ecase:</div>
<div><br></div><div>(defvar *x* (make-array 100 :element-type 'function))</div><div><br></div><div>(setf (svref *x* 20) #'(lambda (x) (+ x 1)))</div><div><br></div><div>? (time (dotimes (i 10000000) (let ((x 3)) (funcall (svref *x* 20) x))))</div>
<div>(DOTIMES (I 10000000) (LET ((X 3)) (FUNCALL (SVREF *X* 20) X))) took 118 milliseconds (0.118 seconds) to run </div><div>                    with 2 available CPU cores.</div><div>During that period, 118 milliseconds (0.118 seconds) were spent in user mode</div>
<div>                    0 milliseconds (0.000 seconds) were spent in system mode</div><div>NIL</div><div>? </div><div><br></div><div><br></div><div>Kind regards</div><div>Taoufik</div><div><br></div><br><div class="gmail_quote">
On Wed, Dec 8, 2010 at 7:15 PM, Julian Squires <span dir="ltr"><<a href="mailto:julian@cipht.net">julian@cipht.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
On Wed, Dec 8, 2010 at 11:52 AM, Taoufik Dachraoui<br>
<div class="im"><<a href="mailto:dachraoui.taoufik@gmail.com">dachraoui.taoufik@gmail.com</a>> wrote:<br>
</div><div class="im">> The ecase will check all the clauses in order (like cond) until it finds a<br>
> match.<br>
<br>
</div>Not necessarily.  See Geoff Wozniak's comparison of case performance<br>
on his blog:<br>
  <a href="http://exploring-lisp.blogspot.com/2009/07/postscript-to-jump-tables-stuff.html" target="_blank">http://exploring-lisp.blogspot.com/2009/07/postscript-to-jump-tables-stuff.html</a><br>
(that post has his conclusions and links to the earlier posts which<br>
contain performance figures, as well as macros which might do what you<br>
want.)<br>
<br>
--<br>
<font color="#888888">Julian Squires<br>
</font></blockquote></div><br>