sequences.extras: Experimenting with collapse, compact words. Add even/odd-indices words.

db4
Doug Coleman 2012-04-18 14:06:41 -07:00
parent 9e9d830ec0
commit 161cd8222c
2 changed files with 28 additions and 2 deletions

View 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

View 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