5.2 Predicates on Lists

The following predicates test whether a Lisp object is an atom, whether it is a cons cell or is a list, or whether it is the distinguished object nil. (Many of these predicates can be defined in terms of the others, but they are used so often that it is worth having them.)

Function: consp object

This function returns t if object is a cons cell, nil otherwise. nil is not a cons cell, although it is a list.

Function: atom object

This function returns t if object is an atom, nil otherwise. All objects except cons cells are atoms. The symbol nil is an atom and is also a list; it is the only Lisp object that is both.

(atom object) ≡ (not (consp object))
Function: listp object

This function returns t if object is a cons cell or nil. Otherwise, it returns nil.

(listp '(1))
     ⇒ t
(listp '())
     ⇒ t
Function: nlistp object

This function is the opposite of listp: it returns t if object is not a list. Otherwise, it returns nil.

(listp object) ≡ (not (nlistp object))
Function: null object

This function returns t if object is nil, and returns nil otherwise. This function is identical to not, but as a matter of clarity we use null when object is considered a list and not when it is considered a truth value (see not in Constructs for Combining Conditions).

(null '(1))
     ⇒ nil
(null '())
     ⇒ t
Function: proper-list-p object

This function returns the length of object if it is a proper list, nil otherwise (see Lists and Cons Cells). In addition to satisfying listp, a proper list is neither circular nor dotted.

(proper-list-p '(a b c))
    ⇒ 3
(proper-list-p '(a b . c))
    ⇒ nil