: length-operator ( seq quot -- n quot' )
[ length-iterator ] dip compose ; inline
-: length-operator-last ( seq quot -- n quot' )
- length-operator [ 1 - ] dip ; inline
+: collect-into ( quot into -- quot' )
+ [ [ keep ] dip set-nth-unsafe ] 2curry ; inline
-: sequence-operator-from ( seq quot i -- i n quot' )
- -rot length-operator ; inline
-
-: sequence-operator-last-from ( seq quot i -- n quot' )
- -rot length-operator-last nip ; inline
+: collect-from ( i n quot into -- )
+ collect-into each-integer-from ; inline
: collect ( n quot into -- )
- [ [ keep ] dip set-nth-unsafe ] 2curry each-integer ; inline
+ collect-into each-integer ; inline
: sequence-index-operator ( seq quot -- n quot' )
[ length-iterator [ keep ] curry ] dip compose ; inline
sequence-operator each-integer-from ; inline
: each-from ( ... seq quot: ( ... x -- ... ) i -- ... )
- sequence-operator-from each-integer-from ; inline
+ -rot length-operator each-integer-from ; inline
: reduce ( ... seq identity quot: ( ... prev elt -- ... next ) -- ... result )
swapd each ; inline
+: map-integers-from-as ( ... from len quot: ( ... i -- ... elt ) exemplar -- ... newseq )
+ overd [ [ collect-from ] keep ] new-like ; inline
+
: map-integers-as ( ... len quot: ( ... i -- ... elt ) exemplar -- ... newseq )
overd [ [ collect ] keep ] new-like ; inline
2over bounds-check? [ call ] [ 3drop f f ] if ; inline
: find-from-unsafe ( ... n seq quot: ( ... elt -- ... ? ) -- ... i elt )
- [ rot sequence-operator-from find-integer-from ] keepd
+ [ length-operator find-integer-from ] keepd
index/element ; inline
: find-last-from-unsafe ( ... n seq quot: ( ... elt -- ... ? ) -- ... i elt )
- [ rot sequence-operator-last-from find-last-integer ] keepd
+ [ length-operator nip find-last-integer ] keepd
index/element ; inline
PRIVATE>
<PRIVATE
: last-unsafe ( seq -- elt )
- [ length 1 - ] [ nth-unsafe ] bi ; inline
+ index-of-last nth-unsafe ; inline
PRIVATE>
index-of-last
over 0 < [ bounds-error ] [ set-nth-unsafe ] if ; inline
-: pop* ( seq -- ) [ length 1 - ] [ shorten ] bi ;
+: pop* ( seq -- ) index-of-last shorten ;
<PRIVATE
: subseq-index ( seq subseq -- i/f ) [ 0 ] 2dip subseq-index-from ; inline
-: subseq-index? ( seq subseq -- ? ) subseq-index >boolean ; inline
+: subseq-of? ( seq subseq -- ? ) subseq-index >boolean ; inline
: subseq-start-from ( subseq seq n -- i/f )
spin subseq-index-from ; inline deprecated