检查Common Lisp中列表中的每个列表是否为空

时间:2010-10-14 19:43:18

标签: null lisp lambda common-lisp c++

我知道我可以检查列表列表是否只包含这样的空列表

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

但是,在Lisp中执行此操作是不是更简单,更简单?如果是这样,怎么样?

2 个答案:

答案 0 :(得分:11)

高阶函数every采用谓词函数和列表,如果谓词对列表中的每个元素都返回true,则返回true。

所以你可以这样做:

(every #'null my-list)

答案 1 :(得分:1)

(find-if #'identity list)

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

请参阅Common Lisp HyperSpec以获取列表和序列的完整功能列表。