<HTML><BODY><P>I compared parameterize with lexical var<BR>----<BR>&gt; (require rackunit)<BR>&gt; (define my-parameter (make-parameter (box 0)))<BR>&gt; (time <BR>&nbsp;&nbsp; (parameterize ([my-parameter (box 0)]) <BR>&nbsp;&nbsp;&nbsp;&nbsp; (for ([x (in-range 10000000)]) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (set-box! (my-parameter) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (add1 (unbox (my-parameter))))) <BR>&nbsp;&nbsp;&nbsp;&nbsp; (check-equal? (unbox (my-parameter)) 10000000))) </P>
<P>cpu time: 3578 real time: 3610 gc time: 0<BR>&gt; (time <BR>&nbsp;&nbsp; (let ([my-parameter (box 0)]) <BR>&nbsp;&nbsp;&nbsp;&nbsp; (for ([x (in-range 10000000)]) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (set-box! my-parameter <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (add1 (unbox my-parameter)))) <BR>&nbsp;&nbsp;&nbsp;&nbsp; (check-equal? (unbox my-parameter) 10000000))) </P>
<P>cpu time: 47 real time: 47 gc time: 0<BR>----<BR><BR>100 times difference!<BR><BR>The same experiment with Common Lisp (SBCL):<BR>----<BR>CL-USER&gt; (setf *a* (list 0))<BR>(0)<BR>CL-USER&gt; (time (progn (loop :for i :from 0 :below 10000000<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :do (setf (car *a*) (+ 1 (car *a*)))) (= (car *a*) 10000000)))<BR>Evaluation took:<BR>&nbsp; 0.063 seconds of real time<BR>&nbsp; 0.062500 seconds of total run time (0.062500 user, 0.000000 system)<BR>&nbsp; 98.41% CPU<BR>&nbsp; 172,464,541 processor cycles<BR>&nbsp; 0 bytes consed<BR>&nbsp; <BR>T<BR>CL-USER&gt; (let ((a (list 0))) (time (loop :for i :from 0 :below 10000000<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :do (setf (car a) (+ 1 (car a))))) (= (car a) 10000000))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>Evaluation took:<BR>&nbsp; 0.047 seconds of real time<BR>&nbsp; 0.046875 seconds of total run time (0.046875 user, 0.000000 system)<BR>&nbsp; 100.00% CPU<BR>&nbsp; 132,098,942 processor cycles<BR>&nbsp; 0 bytes consed<BR>&nbsp; <BR>T<BR>----<BR>Only 1.5 times.<BR><BR>Is it undesirable to use parameterize as replacement for common lisp special variables? What is it&nbsp;designed for then?<BR><BR><BR>-- <BR>Roman Klochkov</P></BODY></HTML>