2010-10-14 64 views
3

我知道我可以检查是否列出的清单中只包含这样检查列表中的每一个列表是否为空Common Lisp中

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中这样做的更短,更简单的方法?如果是这样,怎么样?

+1

EVERY是正确的答案,但你的例子也会更简单(find-if(complement#'null)my-list)。 – Xach 2010-10-14 20:18:01

回答

10

高阶函数every接受谓词函数和列表,并返回true,如果谓词对列表中的每个元素返回true。

所以,你可以这样做:

(every #'null my-list) 
+0

谢谢!奇怪的是,温斯顿和霍恩没有提到每一个。 – 2010-10-14 19:55:43

1
(find-if #'identity list) 

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

的功能列表和序列的完整列表,请查阅Common Lisp的HyperSpec。