"Collapse multiple spaces in a string down to a single space"
{ $example "USING: kernel prettyprint sequences.extras ;" "\" Hello, crazy world \" [ CHAR: \\s = ] \" \" compact ." "\"Hello, crazy world\"" } } ;
-HELP: combos
-{ $values
- { "list1" sequence }
- { "list2" sequence }
- { "result" sequence } }
-{ $description "Returns all combinations of the first sequence with the second sequence. The result is not uniquified: if the sequences contain duplicate elements, then the same pair may appear multiple times in the result sequence." } ;
-
HELP: <evens>
{ $values { "seq" sequence } { "evens" evens } }
{ $description "Create a virtual sequence whose elements consist of the even-indexed elements from the original sequence." }
vectors ;
IN: sequences.extras
-: reduce1 ( seq quot -- result ) [ unclip ] dip reduce ; inline
-
-:: reduce-r ( seq identity quot: ( obj1 obj2 -- obj ) -- result )
- seq [ identity ] [
- unclip [ identity quot reduce-r ] [ quot call ] bi*
- ] if-empty ; inline recursive
-
-! Quot must have static stack effect, unlike "reduce"
-:: reduce* ( seq identity quot: ( prev elt -- next ) -- result )
- seq [ identity ] [
- unclip identity swap quot call( prev elt -- next )
- quot reduce*
- ] if-empty ; inline recursive
-
-:: combos ( list1 list2 -- result )
- list2 [ [ 2array ] curry list1 swap map ] map concat ;
-
: find-all ( ... seq quot: ( ... elt -- ... ? ) -- ... elts )
[ <enum> ] dip '[ nip @ ] assoc-filter ; inline