From 5b83dc2e909fb512b8458cf5b196df06e728b040 Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Thu, 19 Apr 2012 16:41:44 -0700 Subject: [PATCH] sequences.extras: adding slice-when (non-destructive split-when). --- extra/sequences/extras/extras-tests.factor | 6 +++++- extra/sequences/extras/extras.factor | 8 ++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) 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