diff --git a/extra/sequences/extras/extras-tests.factor b/extra/sequences/extras/extras-tests.factor index 45f08db319..968f827997 100644 --- a/extra/sequences/extras/extras-tests.factor +++ b/extra/sequences/extras/extras-tests.factor @@ -1,4 +1,5 @@ -USING: ascii kernel make math sequences sequences.extras tools.test ; +USING: ascii kernel make math sequences sequences.extras strings +tools.test ; IN: sequences.extras.tests @@ -45,3 +46,6 @@ IN: sequences.extras.tests { " a b c d e " } [ " a b c d e " [ blank? ] " " collapse ] unit-test + +{ { "hello," " " "world!" " " " " } } +[ "hello, world! " [ blank? ] slice-when [ >string ] map ] unit-test diff --git a/extra/sequences/extras/extras.factor b/extra/sequences/extras/extras.factor index 10a743e868..eac2f5236a 100644 --- a/extra/sequences/extras/extras.factor +++ b/extra/sequences/extras/extras.factor @@ -95,3 +95,11 @@ IN: sequences.extras [ [ first empty? ] dip [ prepend ] curry when ] [ [ last empty? ] dip [ append ] curry when ] 2tri ; inline + +:: slice-when ( seq quot: ( elt -- ? ) -- seq' ) + seq length :> len + 0 [ len dupd < ] [ + dup seq quot find-from drop + [ 2dup = [ 1 + ] when ] [ len ] if* + [ seq ] keep len or swap + ] produce nip ; inline