5.2 Предикаты для списков

Следующие предикаты проверяют, является ли объект Lisp атомом, является ли он ячейкой cons или списком, или является ли он отличительным объектом nil. (Многие из этих предикатов могут быть определены с помощью других, но они используются так часто, что стоит их иметь.)

Функция: consp object

Эта функция возвращает t, если object является ячейкой cons, nil в противном случае. nil не является ячейкой cons, хотя является списком.

Функция: atom object

Эта функция возвращает t, если object является атомом, nil в противном случае. Все объекты, кроме ячеек cons, являются атомами. Символ nil является атомом и также является списком; это единственный объект Lisp, который является обоими.

(atom object) ≡ (not (consp object))
Функция: listp object

Эта функция возвращает t, если object является ячейкой cons или nil. В противном случае возвращает nil.

(listp '(1))
     ⇒ t
(listp '())
     ⇒ t
Функция: nlistp object

Эта функция противоположна listp: она возвращает t, если object не является списком. В противном случае возвращает nil.

(listp object) ≡ (not (nlistp object))
Функция: null object

Эта функция возвращает t, если object равен nil, и возвращает nil в противном случае. Эта функция идентична not, но для ясности мы используем not, когда object рассматривается как логическое значение (см. not в Конструкции для объединения условий) и null в противном случае.

(null '(1))
     ⇒ nil
(null '())
     ⇒ t
Функция: proper-list-p object

Эта функция возвращает длину object, если это правильный список, nil в противном случае (см. Списки и ячейки Cons). В дополнение к удовлетворению listp, правильный список не является циклическим и не имеет точек.

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