23 lines
589 B
Factor
23 lines
589 B
Factor
|
USING: kernel sequences sequences.private math ;
|
||
|
IN: sequences.next
|
||
|
|
||
|
<PRIVATE
|
||
|
|
||
|
: iterate-seq >r dup length swap r> ; inline
|
||
|
|
||
|
: (map-next) ( i seq quot -- )
|
||
|
! this uses O(n) more bounds checks than is really necessary
|
||
|
>r [ >r 1+ r> ?nth ] 2keep nth-unsafe r> call ; inline
|
||
|
|
||
|
PRIVATE>
|
||
|
|
||
|
: each-next ( seq quot -- )
|
||
|
! quot: next-elt elt --
|
||
|
iterate-seq [ (map-next) ] 2curry each-integer ; inline
|
||
|
|
||
|
: map-next ( seq quot -- newseq )
|
||
|
! quot: next-elt elt -- newelt
|
||
|
over dup length swap new-sequence >r
|
||
|
iterate-seq [ (map-next) ] 2curry
|
||
|
r> [ collect ] keep ; inline
|