I'm cross-posting this to this forum from comp.lang.lisp in hopes of getting more discussion. Enjoy.
The CL spec is mute on this point. If a destruct definition includes another struct and the new struct has a slot with the name of a slot in the included struct, what happens?
1. It's an error and the new struct can't be definded.
2. The new struct masks the included struct's slot.
3. It is #2 but the accessor for the new struct will access in the new struct (ignoring the hidden original slot), and the original accessor function will access the hidden in the included struct.
(defstruct person name age)
(defstruct (astronaut (:include person)) age position)
;;; the astronaut definition is either in error (redefining age slot)
;;; or it hides the person-age (perhaps with a warning)
(setf ex-one (make-person :name "Tom" :age 29))
(setf ex-two (make-astronaut :age 27 :position 'captain))
;;; the make-astronaut is either non-existent (the defstruct was in error), or it works
;;; if we get to this point, what happens with the accessors
;;; everyone would agree that this works
(astronaut-age ex-two) => 27
;;; On the other hand, what happens if we use the person accessors
;;; is it -->
(person-age ex-two) => 27 or 29
My warped mind is inclined to allow hiding of an included slot. That would mean that
(person-age ex-two) => 29
Is there a consensus among the various CLs? thanks