Предположим, у меня есть массив значений [a, b, c, d, ...] и функция f (x, ...), которая возвращает истину или ложь.
[1,2,3,4].map {|x| f(x)} => [true true false true]
Во-первых, каков наилучший способ свернуть результирующий список в истинное или ложное значение (через AND)? Есть ли функция, которая позволила бы мне отображать:
[true true false true]
до:
((true && true) && false) && true
с использованием кумулятивного попарного применения двоичного оператора &&?
В этом случае стоимость оценки функции является субфинансовой, поэтому мы хотели бы использовать стиль "lisp" и "для последовательной оценки аргументов (приложений функций), пока один из них не станет ложным. Определено, что может сделать:
!![1,2,3,4].each {|x| break false if !f(x) }
Что некрасиво. Надеюсь, что есть более элегантный способ сделать это. Я знаю, что могу добавить новое понимание в Array, но надеюсь, что есть что-то встроенное, что делает это лучше. Спасибо