前回だと、処理する時間が
リストの長さのほぼ2乗に比例した時間がかかる。
なので、末尾再帰を用いて、反転の中間結果をreversed 残りの反転すべき部分リストをlstとして処理したらいいんじゃない?
[1]> (defun reverse$ (lst) (reverse-loop lst nil)) REVERSE$ [4]> (defun reverse-loop (lst reversed) (if (null lst) reversed (reverse-loop (rest lst) (cons (first lst) reversed)))) REVERSE-LOOP [5]> (reverse$ '(1 2 3 4)) (4 3 2 1)