factor/basis/sequences/next/next.factor

23 lines
589 B
Factor
Executable File

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