sequences.extras: adding a version of filter that uses an elements index.

db4
John Benediktsson 2012-04-18 10:47:25 -07:00
parent cbd6f2cae1
commit ef87f81022
2 changed files with 14 additions and 0 deletions

View File

@ -31,3 +31,5 @@ IN: sequences.extras.tests
[ { 0 1 0 1 } ] [
{ 0 0 0 0 } { 1 3 } over [ 1 + ] change-nths
] unit-test
[ { 1 3 5 } ] [ { 1 2 3 4 5 6 } [ nip even? ] filter-index ] unit-test

View File

@ -69,3 +69,15 @@ IN: sequences.extras
: change-nths ( ... indices seq quot: ( ... elt -- ... elt' ) -- ... )
[ change-nth ] 2curry each ; inline
: push-if-index ( ..a elt i quot: ( ..a elt i -- ..b ? ) accum -- ..b )
[ 2keep drop ] dip rot [ push ] [ 2drop ] if ; inline
: index-selector-for ( quot exemplar -- selector accum )
[ length ] keep new-resizable [ [ push-if-index ] 2curry ] keep ; inline
: filter-index-as ( ... seq quot: ( ... elt i -- ... ? ) exemplar -- ... seq' )
dup [ index-selector-for [ each-index ] dip ] curry dip like ; inline
: filter-index ( ... seq quot: ( ... elt i -- ... ? ) -- ... seq' )
over filter-index-as ; inline