(defun erase (l) (cond ((endp l) nil) ((= (cdr l) nil) nil) (t (cons (car l) (erase (cdr l)))))) ;; prefix : truelistp -> truelistp ;; produces a list of its prefixes (defun prefix (l) (cond ((not(true-listp l)) nil) ((endp l) '()) (t (cons l (prefix (erase l))))))