data/struct
(defstruct name &clauses)
Macro defined at lib/data/struct.lisp:142:2
Define a struct called NAME.
NAME can be either a symbol or a list of three elements, whose
elements name, respectively, the type (returned from type and
used in defmethod, for instance), the constructor’s name, and
the predicate’s name. In case NAME is a symbol, the constructor
and predicate names are automatically derived from that symbol.
Consider:
(defstruct thing ...)
(defstruct (other-thing make-something-else is-something-else?) ...)
The first struct declaration generates a constructor called
make-thing and a predicate called thing?, but the second
declaration generates a constructor called make-something-else
and a predicate is-something-else?.
The CLAUSES argument to defstruct controls the contents of the
generated structure.
The (fields field ...) clause defines the fields of the structure
type. Each field must be of one of the following forms:
field-name(immutable field-name [getter-name])(mutable field-name [getter-name setter-name])Where a field in square brackets is optional. If no name is specified for the getter, it will have the namestruct-field, while the setter will have the nameset-struct-field!.
The (constructor tag fun) clause will use fun as the constructor
for the structure type. tag will be a symbol in fun’s scope that
builds the structure according to the fields clause.