]> gitweb.factorcode.org Git - factor.git/commitdiff
sequences.extras: adding slice-when (non-destructive split-when).
authorJohn Benediktsson <mrjbq7@gmail.com>
Thu, 19 Apr 2012 23:41:44 +0000 (16:41 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Thu, 19 Apr 2012 23:41:44 +0000 (16:41 -0700)
extra/sequences/extras/extras-tests.factor
extra/sequences/extras/extras.factor

index 45f08db3198d623ddba6f2f22d55851d7a412082..968f827997a12d6b7f7bf74ef26d38c87f5d40d1 100644 (file)
@@ -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
index 10a743e868b69bb506267a4af329facbc53e779a..eac2f5236aa6a185f5bbcce450199cb7183c8f26 100644 (file)
@@ -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 <slice> ] keep len or swap
+    ] produce nip ; inline