]> gitweb.factorcode.org Git - factor.git/commitdiff
sequences.extras: adding map-filter.
authorJohn Benediktsson <mrjbq7@gmail.com>
Wed, 25 Apr 2012 22:50:35 +0000 (15:50 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Wed, 25 Apr 2012 22:50:35 +0000 (15:50 -0700)
extra/sequences/extras/extras-tests.factor
extra/sequences/extras/extras.factor

index 90c6676ad317e8f0d0a8d5dd0cafdc7b625bed2e..f44462bb68d080ad555023e17d512ce38e814246 100644 (file)
@@ -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
index 542cf04c448216ab39d2abbfd25e65837da367d9..6755e94254bf004542a76e4c155689c7854907d7 100644 (file)
@@ -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