diff --git a/core/sequences/sequences.factor b/core/sequences/sequences.factor index 55e95c5cf8..df4f7b8529 100644 --- a/core/sequences/sequences.factor +++ b/core/sequences/sequences.factor @@ -331,8 +331,7 @@ PRIVATE> : but-last ( seq -- headseq ) 1 head* ; -: copy ( src i dst -- ) - check-copy copy-unsafe ; inline +: copy ( src i dst -- ) check-copy copy-unsafe ; inline M: sequence clone-like [ dup length ] dip new-sequence [ 0 swap copy-unsafe ] keep ; inline @@ -524,14 +523,21 @@ PRIVATE> : push-if ( ..a elt quot: ( ..a elt -- ..b ? ) accum -- ..b ) [ keep ] dip rot [ push ] [ 2drop ] if ; inline + + : selector-for ( quot exemplar -- selector accum ) - [ length ] keep new-resizable [ [ push-if ] 2curry ] keep ; inline + [ length ] keep (selector-for) ; inline : selector ( quot -- selector accum ) V{ } selector-for ; inline : filter-as ( ... seq quot: ( ... elt -- ... ? ) exemplar -- ... subseq ) - dup [ selector-for [ each ] dip ] curry dip like ; inline + pick length over [ (selector-for) [ each ] dip ] 2curry dip like ; inline : filter ( ... seq quot: ( ... elt -- ... ? ) -- ... subseq ) over filter-as ; inline