Tail recursive flatten in Common Lisp
(defun flatten (lst &optional backtrack acc)
(cond ((consp lst) (flatten (car lst) (cons (cdr lst) backtrack) acc))
(lst (flatten (car backtrack) (cdr backtrack) (cons lst acc)))
(backtrack (flatten (car backtrack) (cdr backtrack) acc))
(t (nreverse acc))))