[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Defstruct Extensions
I think it is a deficiency in the language that you can't access a slot in a
structure via the slot name. Every implementation keeps this information
around and anyone who is writing a layered system eventually needs that
ability and writes a non-portable slot getter. Structure definition
information should be available also.
I propose the addition of several functions to the language:
GET-STRUCTURE-SLOT structure slot [Function]
Returns the value of the slot in STRUCTURE specified by SLOT. SETF may be
used with GET-STRUCTURE-SLOT to modify a slot in a structure.
STRUCTURE-SLOT-NAMES name [Function]
NAME must be a type defined by DEFSTRUCT. This function returns a list of
slot names for structures of that type.
Also nice but not quite so important would be:
MAKE-STRUCTURE name slot-keyword-1 form1 ... [Function]
Creates an instance of a structure. NAME is the type of structure to
create. The rest of the arguments are the same as for the default
constructor function. If a slot is not initialised by a slot-keyword,
then the slot will be initialized with the default init form specified in
the defstruct.
STRUCTURE-OPTION name option [Function]
NAME must be a type defined by defstruct. OPTION must be a defstruct
option (e.g., :conc-name). This function returns the argument that was
given to that option if an argument was given in the call to defstruct.
Otherwise it returns the default value of that option.
For example, after the defstruct on page 312,
(structure-option 'astronaut :conc-name) ==> astro-
STRUCTURE-SLOT-OPTION name slot option [Function]
(This function is included mostly for completeness.)
NAME must be a type defined by defstruct. SLOT is the name of a slot in
that defstruct. OPTION must be a defstruct slot option (:type or
:read-only). This function returns the argument that was given to that
option if an argument was given in the call to defstruct. Otherwise it
returns the default value of that option.
Kevin Gallagher