Tail Recursive Reverse
(defun trrev (lst) (trrevb lst '())) (defun trrevb (in out) (if (null in) out (trrevb (rest in) (cons (first in) out)) ) )
With a tail-recursive function, the unwinding of the recursion is all the same, so it can be compressed into one stack frame.
>(trrev '(a b c d)) 1> (TRREVB (A B C D) NIL) 2> (TRREVB (B C D) (A)) 3> (TRREVB (C D) (B A)) 4> (TRREVB (D) (C B A)) 5> (TRREVB NIL (D C B A)) <5 (TRREVB (D C B A)) <4 (TRREVB (D C B A)) <3 (TRREVB (D C B A)) <2 (TRREVB (D C B A)) <1 (TRREVB (D C B A)) (D C B A)