(in-package :cl-user) (defun class-in-cl-package (class) (eql (symbol-package (class-name class)) (find-package 'cl))) (defun class-has-no-standard-subclasses (class) (notany #'class-in-cl-package (sb-mop:class-direct-subclasses class))) (let ((queue nil) (set nil)) (do-external-symbols (sym 'cl) (let ((class (find-class sym nil))) (when class (push class queue)))) (loop while queue do (let ((class (pop queue))) (cond ((class-has-no-standard-subclasses class) (push class set))))) (flet ((name (class) (symbol-name (class-name class)))) (setf set (stable-sort set #'string-lessp :key #'name)) (setf set (remove-duplicates set :key #'class-name))) (loop for class in set do (format t "~a~%" class)))