listp
listp Function
Syntax:
listp object → generalized-boolean
Arguments and Values:
object—an object.
generalized-boolean—a generalized boolean.
Description:
Returns true if object is of type list; otherwise, returns false.
Examples:
(listp nil) → true
(listp (cons 1 2)) → true
(listp (make-array 6)) → false
(listp t) → false
See Also:
conspNotes:
If object is a cons, listp does not check whether object is a proper list; it returns true for any kind of list.
(listp object) ≡ (typep object ’list) ≡ (typep object ’(or cons null))
Expanded Reference: listp
Testing if an object is a list
listp returns true if its argument is either a cons or NIL (the empty list).
(listp '(1 2 3))
=> T
(listp nil)
=> T
(listp '())
=> T
Non-list objects return NIL
Numbers, strings, symbols (other than NIL), arrays, and other non-list objects all fail the test.
(listp 42)
=> NIL
(listp "hello")
=> NIL
(listp 'foo)
=> NIL
(listp (make-array 3))
=> NIL
listp does not check for proper lists
listp returns true for dotted lists and even for the cons cells that form circular lists. It only checks whether the object is a cons or NIL.
(listp '(a . b))
=> T
(listp '(1 2 . 3))
=> T
Difference from consp
The only difference between listp and consp is their treatment of NIL. listp considers NIL a list; consp does not.
(listp nil)
=> T
(consp nil)
=> NIL
(listp '(a))
=> T
(consp '(a))
=> T
Using listp for input validation
listp can be used to validate that an argument is a list before processing it.
(defun safe-length (x)
"Return the length if x is a proper list, or :not-a-list otherwise."
(if (listp x)
(list-length x)
:not-a-list))
(safe-length '(a b c))
=> 3
(safe-length 42)
=> :NOT-A-LIST