(defun range (from to) (let ((i to) (r nil)) (while (>= i from) (setq r (cons i r)) (setq i (1- i))) r)) (defun sum (xs) (let ((r 0)) (while xs (setq r (+ r (car xs))) (setq xs (cdr xs))) r)) (defun run () (sum (range 0 100000))) (defun bench () (dotimes (i 1000) (run))) ;(bench) ;12235ms => 12m each