USING: kernel combinators quotations arrays sequences assocs generalizations macros fry math ; IN: combinators.short-circuit MACRO: n&& ( quots n -- quot ) [ [ [ f ] ] 2dip swap [ [ '[ drop _ _ keeping dup not ] ] [ drop '[ drop _ ndrop f ] ] 2bi 2array ] with map ] [ '[ _ nnip ] suffix 1array ] bi [ cond ] 3append ; : 0&& ( quots -- ? ) [ ] unoptimized-&& ; : 1&& ( obj quots -- ? ) [ with ] unoptimized-&& ; : 2&& ( obj1 obj2 quots -- ? ) [ with with ] unoptimized-&& ; : 3&& ( obj1 obj2 obj3 quots -- ? ) [ with with with ] unoptimized-&& ; MACRO: n|| ( quots n -- quot ) [ [ [ f ] ] 2dip swap [ [ '[ drop _ _ keeping dup ] ] [ drop '[ _ nnip ] ] 2bi 2array ] with map ] [ '[ drop _ ndrop t ] [ f ] 2array suffix 1array ] bi [ cond ] 3append ; : 0|| ( quots -- ? ) [ ] unoptimized-|| ; : 1|| ( obj quots -- ? ) [ with ] unoptimized-|| ; : 2|| ( obj1 obj2 quots -- ? ) [ with with ] unoptimized-|| ; : 3|| ( obj1 obj2 obj3 quots -- ? ) [ with with with ] unoptimized-|| ;