There was a discussion about tail recursion earlier this year: see
http://www.math.utexas.edu/pipermail/maxima/2006/012334.html
A tail-recursive Maxima function doesn't always (ever?) translate into a
tail-recursive CL function. If you want something like
(defun $sumlist (l x) (if (like l `((mlist))) x ($sumlist ($rest l)
(add x ($first l)))))
you can't get it by translating
sumlist(l,x) := if l = [] then x else sumlist(rest(l),x + first(l));
Barton