; prints recursive list structure ;(let (seen-list) (setf seenlist nil) (defun seenp (l) (member l seenlist :test 'eq)) (defun make-seen (l) (setf seenlist (cons l seenlist))) (defun printrec (l) (printrec-any l) (setf seenlist nil)) (defun printrec-any (l) (cond ((atom l) (prin1 l) (princ " ")) ((seenp l) (princ "<...> ")) (t (make-seen l) (princ "(") (printrec-list l) (princ ") "))) nil) (defun printrec-list (l) (printrec-any (car l)) (cond ((cdr l) (cond ((seenp (cdr l)) (princ "<...> ")) ((atom (cdr l)) (princ ". ") (prin1 (cdr l)) (princ " ")) (t (make-seen (cdr l)) (printrec-list (cdr l)))))) nil) ; )