+ (clos:class-slots (find-class c-name)))
+ #+sbcl-mop (mapcar #'sb-mop::slot-definition-name
+ (sb-mop:class-slots (find-class c-name)))
+ #+sbcl-pcl (mapcar #'sb-pcl::slot-definition-name
+ (sb-pcl:class-slots (sb-pcl::find-class c-name)))
+ #+cmu (mapcar #'pcl::slot-definition-name
+ (pcl:class-slots (pcl:find-class c-name)))
+ #+mcl
+ (let* ((class (find-class c-name nil)))
+ (when (typep class 'standard-class)
+ (nconc (mapcar #'car (ccl:class-instance-slots class))
+ (mapcar #'car (ccl:class-class-slots class)))))
+ #-(or allegro lispworks cmu mcl sbcl scl)
+ (error "class-slot-names is not defined on this platform")
+ )
+
+(defun structure-slot-names (s-name)
+ "Given a STRUCTURE-NAME, returns a list of the slots in the structure."
+ #+allegro (class-slot-names s-name)
+ #+lispworks (structure:structure-class-slot-names
+ (find-class s-name))
+ #+sbcl-mop (mapcar #'sb-mop::slot-definition-name
+ (sb-mop:class-slots (find-class s-name)))
+ #+sbcl-pcl (mapcar #'sb-pcl::slot-definition-name
+ (sb-pcl:class-slots (sb-pcl::find-class s-name)))
+ #+cmu (mapcar #'pcl::slot-definition-name
+ (pcl:class-slots (pcl:find-class s-name)))
+ #+scl (mapcar #'kernel:dsd-name
+ (kernel:dd-slots
+ (kernel:layout-info
+ (kernel:class-layout (find-class s-name)))))
+ #+mcl (let* ((sd (gethash s-name ccl::%defstructs%))
+ (slots (if sd (ccl::sd-slots sd))))
+ (mapcar #'car (if (symbolp (caar slots)) slots (cdr slots))))
+ #-(or allegro lispworks cmu sbcl scl mcl)
+ (error "structure-slot-names is not defined on this platform")
+ )