17

在 Python 中有函数allany如果列表的所有或部分元素分别为真,则它们返回真。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))
4

2 回答 2

31

在 Common Lisp 中,使用every(相当于all)和some(相当于any)。

于 2012-12-18T19:34:49.423 回答
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
于 2012-12-18T19:44:31.487 回答