add filter-as to sequences
parent
1a7b4d7c63
commit
e31ed3eda4
|
@ -426,6 +426,10 @@ HELP: filter
|
||||||
{ $values { "seq" sequence } { "quot" { $quotation "( elt -- ? )" } } { "subseq" "a new sequence" } }
|
{ $values { "seq" sequence } { "quot" { $quotation "( elt -- ? )" } } { "subseq" "a new sequence" } }
|
||||||
{ $description "Applies the quotation to each element in turn, and outputs a new sequence containing the elements of the original sequence for which the quotation output a true value." } ;
|
{ $description "Applies the quotation to each element in turn, and outputs a new sequence containing the elements of the original sequence for which the quotation output a true value." } ;
|
||||||
|
|
||||||
|
HELP: filter-as
|
||||||
|
{ $values { "seq" sequence } { "quot" { $quotation "( elt -- ? )" } } { "exemplar" sequence } { "subseq" "a new sequence" } }
|
||||||
|
{ $description "Applies the quotation to each element in turn, and outputs a new sequence of the same type as " { $snippet "exemplar" } " containing the elements of the original sequence for which the quotation output a true value." } ;
|
||||||
|
|
||||||
HELP: filter-here
|
HELP: filter-here
|
||||||
{ $values { "seq" "a resizable mutable sequence" } { "quot" { $quotation "( elt -- ? )" } } }
|
{ $values { "seq" "a resizable mutable sequence" } { "quot" { $quotation "( elt -- ? )" } } }
|
||||||
{ $description "Applies the quotation to each element in turn, and removes elements for which the quotation outputs a false value." }
|
{ $description "Applies the quotation to each element in turn, and removes elements for which the quotation outputs a false value." }
|
||||||
|
@ -1512,6 +1516,7 @@ ARTICLE: "sequences-combinators" "Sequence combinators"
|
||||||
"Filtering:"
|
"Filtering:"
|
||||||
{ $subsections
|
{ $subsections
|
||||||
filter
|
filter
|
||||||
|
filter-as
|
||||||
partition
|
partition
|
||||||
}
|
}
|
||||||
"Testing if a sequence contains elements satisfying a predicate:"
|
"Testing if a sequence contains elements satisfying a predicate:"
|
||||||
|
|
|
@ -483,11 +483,17 @@ PRIVATE>
|
||||||
: push-if ( elt quot accum -- )
|
: push-if ( elt quot accum -- )
|
||||||
[ keep ] dip rot [ push ] [ 2drop ] if ; inline
|
[ keep ] dip rot [ push ] [ 2drop ] if ; inline
|
||||||
|
|
||||||
|
: pusher-for ( quot exemplar -- quot accum )
|
||||||
|
[ length ] keep new-resizable [ [ push-if ] 2curry ] keep ; inline
|
||||||
|
|
||||||
: pusher ( quot -- quot accum )
|
: pusher ( quot -- quot accum )
|
||||||
V{ } clone [ [ push-if ] 2curry ] keep ; inline
|
V{ } pusher-for ; inline
|
||||||
|
|
||||||
|
: filter-as ( seq quot exemplar -- subseq )
|
||||||
|
dup [ pusher-for [ each ] dip ] curry dip like ; inline
|
||||||
|
|
||||||
: filter ( seq quot -- subseq )
|
: filter ( seq quot -- subseq )
|
||||||
over [ pusher [ each ] dip ] dip like ; inline
|
over filter-as ; inline
|
||||||
|
|
||||||
: push-either ( elt quot accum1 accum2 -- )
|
: push-either ( elt quot accum1 accum2 -- )
|
||||||
[ keep swap ] 2dip ? push ; inline
|
[ keep swap ] 2dip ? push ; inline
|
||||||
|
|
Loading…
Reference in New Issue