(defun strip-tail (ls) (labels ((strip-car (l) (cond ((null l) nil) ((null (car l)) (strip-car (cdr l))) (tl)))) (reverse (strip-car (reverse ls)))))
Run example (against your test cases):
[1]> (assert (eq nil (strip-tail nil))) NIL [2]> (assert (eq nil (strip-tail '(nil)))) ;' NIL [3]> (assert (equal '(ab) (strip-tail '(ab nil nil)))) NIL [4]> (assert (equal '(a nil b) (strip-tail '(a nil b nil)))) NIL [5]> (assert (equal '(ab) (strip-tail '(ab)))) NIL [6]>
source share