2007-09-20 18:09:08 -04:00
|
|
|
USING: kernel sequences sequences.private math ;
|
|
|
|
IN: sequences.next
|
|
|
|
|
|
|
|
<PRIVATE
|
|
|
|
|
2008-12-15 23:21:56 -05:00
|
|
|
: iterate-seq ( seq quot -- i seq quot )
|
|
|
|
[ [ length ] keep ] dip ; inline
|
2008-02-23 23:48:45 -05:00
|
|
|
|
2007-09-20 18:09:08 -04:00
|
|
|
: (map-next) ( i seq quot -- )
|
|
|
|
! this uses O(n) more bounds checks than is really necessary
|
2008-12-03 09:46:16 -05:00
|
|
|
[ [ [ 1+ ] dip ?nth ] 2keep nth-unsafe ] dip call ; inline
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
PRIVATE>
|
|
|
|
|
2008-12-03 09:46:16 -05:00
|
|
|
: each-next ( seq quot: ( next-elt elt -- ) -- )
|
2007-09-20 18:09:08 -04:00
|
|
|
iterate-seq [ (map-next) ] 2curry each-integer ; inline
|
|
|
|
|
2008-12-03 09:46:16 -05:00
|
|
|
: map-next ( seq quot: ( next-elt elt -- newelt ) -- newseq )
|
|
|
|
over dup length swap new-sequence [
|
|
|
|
iterate-seq [ (map-next) ] 2curry
|
|
|
|
] dip [ collect ] keep ; inline
|