From: Doug Coleman Date: Tue, 23 Aug 2022 13:21:25 +0000 (-0400) Subject: sequences.extras: Add 2map-filter and variants where the second sequence X-Git-Tag: 0.99~598 X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=commitdiff_plain;h=ce8720367564a71a1c8dae53fa0cdb97c2d31081 sequences.extras: Add 2map-filter and variants where the second sequence is not known before the word is called --- diff --git a/extra/sequences/extras/extras-tests.factor b/extra/sequences/extras/extras-tests.factor index 5d044a1781..a294ae4c94 100644 --- a/extra/sequences/extras/extras-tests.factor +++ b/extra/sequences/extras/extras-tests.factor @@ -1,5 +1,6 @@ -USING: accessors arrays ascii io io.streams.string kernel make -math prettyprint sequences sequences.extras strings tools.test ; +USING: accessors arrays ascii grouping io io.streams.string +kernel make math prettyprint ranges sequences sequences.extras +strings tools.test ; { V{ { 0 104 } { 2 108 } { 3 108 } } } [ "hello" [ even? ] find-all ] unit-test @@ -352,3 +353,22 @@ math prettyprint sequences sequences.extras strings tools.test ; { { -995 11 26 61 } } [ 1000 V{ 5 16 42 103 } [ - ] { } map-prior-identity-as ] unit-test + +{ V{ 1 4 9 } } [ + { 1 2 3 } { 1 2 3 } + [ 2dup 2array all-eq? [ * ] [ 2drop f ] if ] + V{ } 2nested-filter-as +] unit-test + +{ V{ 1 8 27 } } [ + { 1 2 3 } { 1 2 3 } { 1 2 3 } + [ 3dup 3array all-eq? [ * * ] [ 3drop f ] if ] + V{ } 3nested-filter-as +] unit-test + +{ V{ 0 2 0 3 6 4 12 0 5 10 15 20 } } [ + 6 [1..b) + [ [0..b) ] + [ 2dup [ odd? ] bi@ or [ * ] [ 2drop f ] if ] + 2nested-filter* +] unit-test diff --git a/extra/sequences/extras/extras.factor b/extra/sequences/extras/extras.factor index 83320228b9..b6a3bb2c83 100644 --- a/extra/sequences/extras/extras.factor +++ b/extra/sequences/extras/extras.factor @@ -75,6 +75,9 @@ IN: sequences.extras : push-if* ( ..a elt quot: ( ..a elt -- ..b obj/f ) accum -- ..b ) [ call ] dip [ push ] [ drop ] if* ; inline +: push? ( elt/f accum -- ) + over [ push ] [ 2drop ] if ; inline +