sequences.extras: adding even and odd indices virtual sequences.

db4
John Benediktsson 2012-08-09 12:49:29 -07:00
parent 79ee220d6c
commit 378feb5324
2 changed files with 33 additions and 3 deletions

View File

@ -110,3 +110,11 @@ IN: sequences.extras.tests
{ f } [ { } [ even? ] one? ] unit-test { f } [ { } [ even? ] one? ] unit-test
{ { { 5 8 0 } { 6 9 1 } { 7 10 2 } } } [ { 5 6 7 } { 8 9 10 } [ 3array ] 2map-index ] unit-test { { { 5 8 0 } { 6 9 1 } { 7 10 2 } } } [ { 5 6 7 } { 8 9 10 } [ 3array ] 2map-index ] unit-test
{ { } } [ { } <evens> >array ] unit-test
{ { 0 2 } } [ 4 iota <evens> >array ] unit-test
{ { 0 2 4 } } [ 5 iota <evens> >array ] unit-test
{ { } } [ { } <odds> >array ] unit-test
{ { 1 3 } } [ 5 iota <odds> >array ] unit-test
{ { 1 3 5 } } [ 6 iota <odds> >array ] unit-test

View File

@ -1,6 +1,6 @@
USING: arrays grouping kernel locals math math.order math.ranges USING: accessors arrays grouping kernel locals math math.order
sequences sequences.private splitting ; math.ranges sequences sequences.private splitting ;
FROM: sequences => change-nth ;
IN: sequences.extras IN: sequences.extras
: reduce1 ( seq quot -- result ) [ unclip ] dip reduce ; inline : reduce1 ( seq quot -- result ) [ unclip ] dip reduce ; inline
@ -236,3 +236,25 @@ PRIVATE>
: 2map-index ( ... seq1 seq2 quot: ( ... elt1 elt2 index -- ... newelt ) -- ... newseq ) : 2map-index ( ... seq1 seq2 quot: ( ... elt1 elt2 index -- ... newelt ) -- ... newseq )
pick [ (2each-index) ] dip map-integers ; inline pick [ (2each-index) ] dip map-integers ; inline
TUPLE: evens seq length ;
: <evens> ( seq -- evens )
dup length 1 + 2/ evens boa ; inline
M: evens length length>> ; inline
M: evens nth-unsafe [ 2 * ] [ seq>> nth-unsafe ] bi* ; inline
INSTANCE: evens immutable-sequence
TUPLE: odds seq length ;
: <odds> ( seq -- odds )
dup length 2/ odds boa ; inline
M: odds length length>> ; inline
M: odds nth-unsafe [ 2 * 1 + ] [ seq>> nth-unsafe ] bi* ; inline
INSTANCE: odds immutable-sequence