diff --git a/basis/combinators/short-circuit/short-circuit.factor b/basis/combinators/short-circuit/short-circuit.factor index 2b4e522789..d8bab4dd34 100644 --- a/basis/combinators/short-circuit/short-circuit.factor +++ b/basis/combinators/short-circuit/short-circuit.factor @@ -3,9 +3,13 @@ locals generalizations macros fry ; IN: combinators.short-circuit MACRO:: n&& ( quots n -- quot ) - [ f ] - quots [| q | { [ drop n ndup q call dup not ] [ drop n ndrop f ] } ] map - [ n nnip ] suffix 1array + [ f ] quots [| q | + n + [ q '[ drop _ ndup @ dup not ] ] + [ '[ drop _ ndrop f ] ] + bi 2array + ] map + n '[ _ nnip ] suffix 1array [ cond ] 3append ; MACRO: 0&& ( quots -- quot ) '[ _ 0 n&& ] ; @@ -14,10 +18,13 @@ MACRO: 2&& ( quots -- quot ) '[ _ 2 n&& ] ; MACRO: 3&& ( quots -- quot ) '[ _ 3 n&& ] ; MACRO:: n|| ( quots n -- quot ) - [ f ] - quots - [| q | { [ drop n ndup q call dup ] [ n nnip ] } ] map - { [ drop n ndrop t ] [ f ] } suffix 1array + [ f ] quots [| q | + n + [ q '[ drop _ ndup @ dup ] ] + [ '[ _ nnip ] ] + bi 2array + ] map + n '[ drop _ ndrop t ] [ f ] 2array suffix 1array [ cond ] 3append ; MACRO: 0|| ( quots -- quot ) '[ _ 0 n|| ] ;