Internally, dspecs are handled in the canonical form:
(
dspec-class
primary-name
.
qualifiers
)
where
dspec-class
in the canonical name of the class, and
qualifiers
is a proper list.
primary-name
is typically a symbol, but can be a list (in the case of a
setf
function) or a string (in the case of a package). The equality for canonical dspecs is
equal
.
As an example the general form of a
defmethod
dspec is:
(defmethod name qualifiers (specializer *))
name := symbol | (setf symbol )
qualifiers := qualifier | (qualifier qualifier *)
qualifier := symbol
specializer := symbol | (eql object )
Functions in the dspec API accept non-canonical dspecs. All dspec functions, except
dspec:prettify-dspec
, find-dspec-locations, name-definition-locations, dspec-definition-locations and find-name-locations return canonical dspecs.