2010-10-14 61 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。