CLCS

Type Specifiers

Type specifiers can be symbols, classes, or lists. Figure~4–2 lists symbols that are standardized atomic type specifiers, and Figure~4–3 lists standardized compound type specifier names. For syntax information, see the dictionary entry for the corresponding type specifier. It is possible to define new type specifiers using defclass, define-condition, defstruct, or deftype.

arithmetic-errorfunctionsimple-condition
arraygeneric-functionsimple-error
atomhash-tablesimple-string
base-charintegersimple-type-error
base-stringkeywordsimple-vector
bignumlistsimple-warning
bitlogical-pathnamesingle-float
bit-vectorlong-floatstandard-char
broadcast-streammethodstandard-class
built-in-classmethod-combinationstandard-generic-function
cell-errornilstandard-method
characternullstandard-object
classnumberstorage-condition
compiled-functionpackagestream
complexpackage-errorstream-error
concatenated-streamparse-errorstring
conditionpathnamestring-stream
consprint-not-readablestructure-class
control-errorprogram-errorstructure-object
division-by-zerorandom-statestyle-warning
double-floatratiosymbol
echo-streamrationalsynonym-stream
end-of-filereader-errort
errorreadtabletwo-way-stream
extended-charrealtype-error
file-errorrestartunbound-slot
file-streamsequenceunbound-variable
fixnumserious-conditionundefined-function
floatshort-floatunsigned-byte
floating-point-inexactsigned-bytevector
floating-point-invalid-operationsimple-arraywarning
floating-point-overflowsimple-base-string
floating-point-underflowsimple-bit-vector
Figure 4–2: Standardized Atomic Type Specifiers

If a type specifier is a list, the car of the list is a symbol, and the rest of the list is subsidiary type information. Such a type specifier is called a compound type specifier . Except as explicitly stated otherwise, the subsidiary items can be unspecified. The unspecified subsidiary items are indicated by writing *. For example, to completely specify a vector, the type of the elements and the length of the vector must be present.

 (vector double-float 100)

The following leaves the length unspecified:

 (vector double-float *)

The following leaves the element type unspecified:

 (vector * 100)                                      

Suppose that two type specifiers are the same except that the first has a * where the second has a more explicit specification. Then the second denotes a subtype of the type denoted by the first.

If a list has one or more unspecified items at the end, those items can be dropped. If dropping all occurrences of * results in a singleton list, then the parentheses can be dropped as well (the list can be replaced by the symbol in its car). For example, (vector double-float *) can be abbreviated to (vector double-float), and (vector * *) can be abbreviated to (vector) and then to vector.

andlong-floatsimple-base-string
arraymembersimple-bit-vector
base-stringmodsimple-string
bit-vectornotsimple-vector
complexorsingle-float
consrationalstring
double-floatrealunsigned-byte
eqlsatisfiesvalues
floatshort-floatvector
functionsigned-byte
integersimple-array
Figure 4–3: Standardized Compound Type Specifier Names

Figure 4–4 show the defined names that can be used as compound type specifier names but that cannot be used as atomic type specifiers.

andmodsatisfies
eqlnotvalues
memberor
Figure 4–4: Standardized Compound-Only Type Specifier Names

New type specifiers can come into existence in two ways.

A class object can be used as a type specifier. When used this way, it denotes the set of all members of that class.

Figure 4–5 shows some defined names relating to types and declarations.

coercedefstructsubtypep
declaimdeftypethe
declareftypetype
defclasslocallytype-of
define-conditionproclaimtypep
Figure 4–5: Defined names relating to types and declarations.

Figure 4–6 shows all defined names that are type specifier names, whether for atomic type specifiers or compound type specifiers; this list is the union of the lists in Figure~4–2 and Figure~4–3.

andfunctionsimple-array
arithmetic-errorgeneric-functionsimple-base-string
arrayhash-tablesimple-bit-vector
atomintegersimple-condition
base-charkeywordsimple-error
base-stringlistsimple-string
bignumlogical-pathnamesimple-type-error
bitlong-floatsimple-vector
bit-vectormembersimple-warning
broadcast-streammethodsingle-float
built-in-classmethod-combinationstandard-char
cell-errormodstandard-class
characternilstandard-generic-function
classnotstandard-method
compiled-functionnullstandard-object
complexnumberstorage-condition
concatenated-streamorstream
conditionpackagestream-error
conspackage-errorstring
control-errorparse-errorstring-stream
division-by-zeropathnamestructure-class
double-floatprint-not-readablestructure-object
echo-streamprogram-errorstyle-warning
end-of-filerandom-statesymbol
eqlratiosynonym-stream
errorrationalt
extended-charreader-errortwo-way-stream
file-errorreadtabletype-error
file-streamrealunbound-slot
fixnumrestartunbound-variable
floatsatisfiesundefined-function
floating-point-inexactsequenceunsigned-byte
floating-point-invalid-operationserious-conditionvalues
floating-point-overflowshort-floatvector
floating-point-underflowsigned-bytewarning
Figure 4–6: Standardized Type Specifier Names

Backlinks

declare, deftype, typep, Types