Multisplit: Difference between revisions

m (→‎{{header|Raku}}: fewer parens, nicer output formatting)
Line 575:
IN: rosetta-code.multisplit
 
: ?pairfirst-subseq ( ?seq xseparators -- {?,x}/fn separator )
tuck
over [ 2array ] [ 2drop f ] if ;
dupd [ swap [ subseq-startindex ] dip ?pair2array ] currywithd map-index sift-keys
 
[ drop f f ] [ best[ first ] infimum-separatorby first2 rot nth ] if-empty ;
: best-separator ( seq -- pos index )
dup [ first ] map infimum '[ first _ = ] find nip first2 ;
 
: first-subseq ( separators seq -- n separator )
dupd [ swap [ subseq-start ] dip ?pair ] curry map-index sift
[ drop f f ] [ best-separator rot nth ] if-empty ;
 
: multisplit ( string separators -- seq )
'[
[ _dup over_ first-subseq dup ] [
length -rot cut-slice swap[ , ] dip swap tail-slice
] while 2drop ,
] { } make ;</lang>
Anonymous user