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