rosetta-code.multisplit: new vocab

master
Alexander Iljin 2020-04-01 22:48:50 +02:00 committed by John Benediktsson
parent 0f9959a15b
commit 9b143a826d
4 changed files with 32 additions and 0 deletions

View File

@ -0,0 +1 @@
Alexander Ilin

View File

@ -0,0 +1,8 @@
! Copyright (C) 2020 Alexander Ilin.
! See http://factorcode.org/license.txt for BSD license.
USING: sequences strings tools.test rosetta-code.multisplit ;
IN: rosetta-code.multisplit.tests
{ { "a" "" "b" "" "c" } } [
"a!===b=!=c" { "==" "!=" "=" } multisplit [ >string ] map
] unit-test

View File

@ -0,0 +1,22 @@
! Copyright (C) 2020 Alexander Ilin.
! See http://factorcode.org/license.txt for BSD license.
USING: arrays fry kernel make sequences ;
IN: rosetta-code.multisplit
: ?pair ( ? x -- {?,x}/f )
over [ 2array ] [ 2drop f ] if ;
: best-separator ( seq -- pos index )
dup [ first ] map infimum '[ first _ = ] filter first 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 )
'[
[ _ over first-subseq dup ] [
length -rot cut-slice swap , swap tail-slice
] while 2drop ,
] { } make ;

View File

@ -0,0 +1 @@
examples