: push-when ( ..a elt quot: ( ..a elt -- ..b ? ) accum -- ..b )
[ keep ] dip rot [ push ] [ 2drop ] if ; inline
-: 2push-when ( ..a elt1 elt2 quot: ( ..a elt1 elt2 -- ..b ? ) accum -- ..b )
- [ keepd ] dip rot [ push ] [ 2drop ] if ; inline
-
: call-push-when ( ..a elt quot: ( ..a elt -- ..b elt' ? ) accum -- ..b )
[ call ] dip swap [ push ] [ 2drop ] if ; inline
: (selector-as) ( quot length exemplar -- selector accum )
new-resizable [ [ push-when ] 2curry ] keep ; inline
-: (2selector-as) ( quot length exemplar -- selector accum )
- new-resizable [ [ 2push-when ] 2curry ] keep ; inline
-
PRIVATE>
: selector-as ( quot exemplar -- selector accum )
: 2reject-map ( ... seq1 seq2 quot: ( ... elt1 elt2 -- ... ? ) map-quot: ( elt1 elt2 -- obj ) -- ... newseq )
pick 2reject-map-as ; inline
+: 2push-when ( ..a elt1 elt2 quot: ( ..a elt1 elt2 -- ..b ? ) accum -- ..b )
+ [ keepd ] dip rot [ push ] [ 2drop ] if ; inline
+
+: (2selector-as) ( quot length exemplar -- selector accum )
+ new-resizable [ [ 2push-when ] 2curry ] keep ; inline
: 2filter-as ( ... seq1 seq2 quot: ( ... elt1 elt2 -- ... newelt ) exemplar -- ... newseq )
[