Подтвердить что ты не робот

Общий Lisp: все или любые элементы являются истинными в списке

В Python есть функции all и any они возвращают 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))
4b9b3361

Ответ 1

В Common Lisp используйте every (что эквивалентно all) и some (что эквивалентно any).

Ответ 2

Вы можете использовать макрос 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