Проверка, является ли каждый список в списке нулевым в Common Lisp - PullRequest
3 голосов
/ 14 октября 2010

Я знаю, что могу проверить, содержит ли список списков только нулевые списки, подобные этому

CL-USER> (null (find-if (lambda (item) (not (null item))) my-list))

где my-list - список списков.

Например:

CL-USER> (null (find-if (lambda (item) (not (null item))) '(nil (bob) nil)))
NIL
CL-USER> (null (find-if (lambda (item) (not (null item))) '(() () ())))
T

Но нет ли более короткого и простого способа сделать это в Лиспе? Если да, то как?

Ответы [ 2 ]

11 голосов
/ 14 октября 2010

Функция высшего порядка every принимает функцию предиката и список и возвращает истину, если предикат возвращает истину для каждого элемента в списке.

Так что вы можете просто сделать:

(every #'null my-list)
1 голос
/ 15 октября 2010
(find-if #'identity list)

(not (find-if-not #'null list))

Обратитесь к Common Lisp HyperSpec для получения полного списка функций для списков и последовательностей.

...