Apropos

typepFunction

    Syntax

    typep object type-specifier &optional environment generalized-boolean

    Arguments and Values

    object — an object.

    type-specifier — any type specifier except values, or a type specifier list whose first element is either function or values.

    environment — an environment object. The default is nil, denoting the null lexical environment and the and current global environment.

    generalized-boolean — a generalized boolean.

    Description

    Returns true if object is of the type specified by type-specifier; otherwise, returns false.

    A type-specifier of the form (satisfies fn) is handled by applying the function fn to object.

    (typep object '(array type-specifier)), where type-specifier is not *, returns true if and only if object is an array that could be the result of supplying type-specifier as the :element-type argument to make-array. (array *) refers to all arrays regardless of element type, while (array type-specifier) refers only to those arrays that can result from giving type-specifier as the :element-type argument to make-array. A similar interpretation applies to (simple-array type-specifier) and (vector type-specifier). See Section 15.1.2.1 (Array Upgrading).

    (typep object '(complex type-specifier)) returns true for all complex numbers that can result from giving numbers of type type-specifier to the function complex, plus all other complex numbers of the same specialized representation. Both the real and the imaginary parts of any such complex number must satisfy:

    (typep realpart 'type-specifier) 
    (typep imagpart 'type-specifier)

    See the function upgraded-complex-part-type.

    Examples
     (typep 12 'integer)  true 
     (typep (1+ most-positive-fixnum) 'fixnum)  false 
     (typep nil t)  true 
     (typep nil nil)  false 
     (typep 1 '(mod 2))  true 
     (typep #c(1 1) '(complex (eql 1)))  true 
    ;; To understand this next example, you might need to refer to 
    ;; Section 12.1.5.3 (Rule of Canonical Representation for Complex Rationals). 
     (typep #c(0 0) '(complex (eql 0)))  false

    Let Ax and Ay be two type specifiers that denote different types, but for which

    (upgraded-array-element-type 'Ax)

    and

    (upgraded-array-element-type 'Ay)

    denote the same type. Notice that

    (typep (make-array 0 :element-type 'Ax) '(array Ax))  true 
    (typep (make-array 0 :element-type 'Ay) '(array Ay))  true 
    (typep (make-array 0 :element-type 'Ax) '(array Ay))  true 
    (typep (make-array 0 :element-type 'Ay) '(array Ax))  true
    Exceptional Situations

    An error of type error is signaled if type-specifier is values, or a type specifier list whose first element is either function or values.

    The consequences are undefined if the type-specifier is not a type specifier.

    See Also

    type-of, upgraded-array-element-type, upgraded-complex-part-type, Section 4.2.3 (Type Specifiers)

    Notes

    Implementations are encouraged to recognize and optimize the case of (typep x (the class y)), since it does not involve any need for expansion of deftype information at runtime.