object—an object.
typespec—a type specifier.
Returns a type specifier, typespec, for a type that has the object as an element. The typespec satisfies the following:
and,
eql,
member,
not,
or,
satisfies,
or values.
(typep object (type-of object))
returns true.
Implicit in this is that type specifiers which are
not valid for use with typep, such as the list form of the
function type specifier, are never returned by type-of.
type-of is always a recognizable subtype
of the class returned by class-of. That is,
(subtypep (type-of object) (class-of object)) → true, true
structure-class or standard-class,
and for conditions,
type-of returns the proper name of the class returned
by class-of if it has a proper name,
and otherwise returns the class itself.
In particular, for objects created by the constructor function
of a structure defined with defstruct without a :type option,
type-of returns the structure name; and for objects created
by make-condition, the typespec is the name of the
condition type.
short-float,
single-float,
double-float,
or long-float
of which the object is an element,
the typespec is a recognizable subtype of that type.
(type-of 'a) → SYMBOL (type-of '(1 . 2)) → CONS or→ (CONS FIXNUM FIXNUM) (type-of #c(0 1)) → COMPLEX or→ (COMPLEX INTEGER) (defstruct temp-struct x y z) → TEMP-STRUCT (type-of (make-temp-struct)) → TEMP-STRUCT (type-of "abc") → STRING or→ (STRING 3) (subtypep (type-of "abc") 'string) → true, true (type-of (expt 2 40)) → BIGNUM or→ INTEGER or→ (INTEGER 1099511627776 1099511627776) or→ SYSTEM::TWO-WORD-BIGNUM or→ FIXNUM (subtypep (type-of 112312) 'integer) → true, true (defvar *foo* (make-array 5 :element-type t)) → *FOO* (class-name (class-of *foo*)) → VECTOR (type-of *foo*) → VECTOR or→ (VECTOR T 5)
array-element-type, class-of, defstruct, typecase, typep, Section 4.2 (Types)
Implementors are encouraged to arrange for type-of to return
a portable value.