The following type specifier lists define a type in terms of other types or objects.
When typep processes an and type specifier, it always tests each of the component types in order from left to right and stops processing as soon as one component of the intersection has been found to which the object in question does not belong. In this respect an and type specifier is similar to an executable and form. The purpose of this similarity is to allow a satisfies type specifier to depend on filtering by previous type specifiers. For example, suppose there were a function primep that takes an integer and says whether it is prime. Suppose also that it is an error to give any object other than an integer to primep. Then the type specifier
is guaranteed never to result in an error because the function primep will not be invoked unless the object in question has already been determined to be an integer.
As for and, when typep processes an or type specifier, it always tests each of the component types in order from left to right and stops processing as soon as one component of the union has been found to which the object in question belongs.