在Python中,有函数all
和any
如果列表的所有或部分元素分别为true,则返回true。 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))
答案 0 :(得分:29)
答案 1 :(得分:6)
您可以将LOOP宏与ALWAYS
和THEREIS
条款一起使用,如下所示:
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