>末尾再帰最適化
されない
>elispでの繰り返し
reduceやmapcarのような高階関数やloopマクロを使う

例:reduceをloopマクロで
(defun reduce (f a0 xs)
(loop with a = a0
for x in xs
do (setq a (funcall f a x))
finally (return a)))
(foldl '+ 0 '(1 2 3)) ; => 6

loopマクロはコンパイル時にwhileスペシャルフォームの形に変換されるので
コンパイルすれば効率もまずまず

ただしloopマクロもreduceも(require 'cl)しないと使えない
clパッケージには他にも有用なマクロや関数が定義されている
詳しくは(info "CL")を参照すること