2012-12-18 80 views
14

在Python中,函數allany它們在列表中的所有或某些元素分別爲true時返回true。 Common Lisp中有相同的功能嗎?如果不是,寫出它們最簡潔和習慣的方式是什麼?Common Lisp:列表中的所有元素或任何元素都爲真

目前,我有這樣的:

(defun all (xs) 
    (reduce (lambda (x y) (and x y)) xs :initial-value t)) 

(defun any (xs) 
    (reduce (lambda (x y) (or x y)) xs :initial-value nil)) 

回答

24

Common Lisp中,使用every(這就是all的當量)和some(這就是any等效)。

6

您可以使用LOOP宏與ALWAYSTHEREIS條款是這樣的:

CL-USER 1 > (loop for item in '(nil nil nil) always item) 
NIL 

CL-USER 2 > (loop for item in '(nil nil t) always item) 
NIL 

CL-USER 3 > (loop for item in '(t t t) always item) 
T 

CL-USER 4 > (loop for item in '(nil nil nil) thereis item) 
NIL 

CL-USER 5 > (loop for item in '(nil nil t) thereis item) 
T 

CL-USER 6 > (loop for item in '(t t t) thereis item) 
T 
相關問題