; unroll loop code: (dotimes (var n) code) (defun unroll (docode) (let ((var (car (cadr docode))) (n (cadr (cadr docode))) (code (caddr docode)) result) (if (and (integerp n) (< n 20)) (cons 'progn (dotimes (i n (nreverse result)) (push (subst i var code) result) ) ) docode) ))
> (unroll '(dotimes (i 3) (setf (aref x i) (aref y i)))) (PROGN (SETF (AREF X 0) (AREF Y 0)) (SETF (AREF X 1) (AREF Y 1)) (SETF (AREF X 2) (AREF Y 2)))
Contents    Page-10    Prev    Next    Page+10    Index