]> gitweb.factorcode.org Git - factor.git/commitdiff
sequences.extras: Experimenting with collapse, compact words. Add even/odd-indices...
authorDoug Coleman <doug.coleman@gmail.com>
Wed, 18 Apr 2012 21:06:41 +0000 (14:06 -0700)
committerDoug Coleman <doug.coleman@gmail.com>
Wed, 18 Apr 2012 22:18:54 +0000 (15:18 -0700)
extra/sequences/extras/extras-tests.factor
extra/sequences/extras/extras.factor

index 27e73e954bc1fc5551e86fbf1cd38a81614cfa5b..45f08db3198d623ddba6f2f22d55851d7a412082 100644 (file)
@@ -1,4 +1,4 @@
-USING: kernel make math sequences sequences.extras tools.test ;
+USING: ascii kernel make math sequences sequences.extras tools.test ;
 
 IN: sequences.extras.tests
 
@@ -33,3 +33,15 @@ IN: sequences.extras.tests
 ] unit-test
 
 [ { 1 3 5 } ] [ { 1 2 3 4 5 6 } [ nip even? ] filter-index ] unit-test
+
+[ V{ 1 3 5 } ] [ { 1 2 3 4 5 6 } [ nip even? ] V{ } filter-index-as ] unit-test
+
+[ { 1 3 5 } ] [ { 1 2 3 4 5 6 } even-indices ] unit-test
+
+[ { 2 4 6 } ] [ { 1 2 3 4 5 6 } odd-indices ] unit-test
+
+{ "a b c d e" }
+[ "a      b  \t \n \r  c   d \n    e   " [ blank? ] " " compact ] unit-test
+
+{ " a b c d e " }
+[ " a      b  c   d    e   " [ blank? ] " " collapse ] unit-test
index 1a5fd293b6398a1c8a23543f373fc3b4d007aaa1..10a743e868b69bb506267a4af329facbc53e779a 100644 (file)
@@ -1,5 +1,5 @@
 USING: arrays grouping kernel locals math math.order math.ranges
-sequences ;
+sequences splitting ;
 
 IN: sequences.extras
 
@@ -81,3 +81,17 @@ IN: sequences.extras
 
 : filter-index ( ... seq quot: ( ... elt i -- ... ? ) -- ... seq' )
     over filter-index-as ; inline
+
+: even-indices ( seq -- seq' ) [ nip even? ] filter-index ;
+
+: odd-indices ( seq -- seq' ) [ nip odd? ] filter-index ;
+
+: compact ( seq quot elt -- seq' )
+    [ split-when harvest ] dip join ; inline
+
+: collapse ( seq quot elt -- seq' )
+    [ split-when ] dip
+    [ [ harvest ] dip join ]
+    [ [ first empty? ] dip [ prepend ] curry when ]
+    [ [ last empty? ] dip [ append ] curry when ]
+    2tri ; inline