Ответ 1
В Common Lisp используйте every (что эквивалентно all
) и some (что эквивалентно any
).
В 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))
В Common Lisp используйте every (что эквивалентно all
) и some (что эквивалентно any
).
Вы можете использовать макрос 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