From 9bc6e29506b4f68fb23784723488893b4e999028 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Wed, 25 Apr 2012 15:50:35 -0700 Subject: [PATCH] sequences.extras: adding map-filter. --- extra/sequences/extras/extras-tests.factor | 4 ++++ extra/sequences/extras/extras.factor | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/extra/sequences/extras/extras-tests.factor b/extra/sequences/extras/extras-tests.factor index 90c6676ad3..f44462bb68 100644 --- a/extra/sequences/extras/extras-tests.factor +++ b/extra/sequences/extras/extras-tests.factor @@ -59,3 +59,7 @@ IN: sequences.extras.tests { V{ 0 0 1 0 1 2 } } [ 4 iota [ iota ] map-concat ] unit-test { "abc" } [ "abc" [ 1string ] map-concat ] unit-test { { 97 98 99 } } [ "abc" [ 1string ] { } map-concat-as ] unit-test + +{ { } } [ { } [ ] [ even? ] map-filter ] unit-test +{ "bcde" } [ "abcd" [ 1 + ] [ drop t ] map-filter ] unit-test +{ { 0 4 16 36 64 } } [ 10 iota [ sq ] [ even? ] { } map-filter-as ] unit-test diff --git a/extra/sequences/extras/extras.factor b/extra/sequences/extras/extras.factor index 542cf04c44..6755e94254 100644 --- a/extra/sequences/extras/extras.factor +++ b/extra/sequences/extras/extras.factor @@ -127,3 +127,9 @@ IN: sequences.extras : map-concat ( ... seq quot: ( ... elt -- ... newelt ) -- ... newseq ) over map-concat-as ; inline + +: map-filter-as ( ... seq quot: ( ... elt -- ... newelt ) quot: ( ... newelt -- ... ? ) exemplar -- ... subseq ) + dup [ selector-for [ compose each ] dip ] curry dip like ; inline + +: map-filter ( ... seq quot: ( ... elt -- ... newelt ) quot: ( ... newelt -- ... ? ) -- ... subseq ) + pick map-filter-as ; inline