]> gitweb.factorcode.org Git - factor.git/commitdiff
splitting: simpler split
authorDoug Coleman <doug.coleman@gmail.com>
Sun, 31 Jul 2022 21:35:01 +0000 (16:35 -0500)
committerDoug Coleman <doug.coleman@gmail.com>
Sun, 31 Jul 2022 21:47:32 +0000 (16:47 -0500)
core/splitting/splitting-tests.factor
core/splitting/splitting.factor

index 757cf7ffd1e327c7ab0d3cf2551fb700f4edc437..0c628d0291c9ca88f81c4cb54e38615fe31f37d9 100644 (file)
@@ -4,11 +4,13 @@ USING: ascii kernel math sequences splitting strings tools.test ;
 { "hello" "world-+." } [ "hello-+world-+." "-+" split1 ] unit-test
 { "goodbye" f } [ "goodbye" " " split1 ] unit-test
 { "" "" } [ "great" "great" split1 ] unit-test
+{ { 1 2 3 } f } [ { 1 2 3 } { 5 6 } split1 ] unit-test
 
 { "hello world" "." } [ "hello world ." " " split1-last ] unit-test
 { "hello-+world" "." } [ "hello-+world-+." "-+" split1-last ] unit-test
 { "goodbye" f } [ "goodbye" " " split1-last ] unit-test
 { "" "" } [ "great" "great" split1-last ] unit-test
+{ { 1 2 3 } f } [ { 1 2 3 } { 5 6 } split1-last ] unit-test
 
 { "hello world" "." } [ "hello world ." " " split1-last-slice [ >string ] bi@ ] unit-test
 { "hello-+world" "." } [ "hello-+world-+." "-+" split1-last-slice [ >string ] bi@ ] unit-test
index 0002fbe880981f72b274c90eaeaa093bceb659aa..27cf79c10b02bef31f9cb8bbc801a4fa68e36d2e 100644 (file)
@@ -25,21 +25,20 @@ PRIVATE>
 : ?tail-slice ( seq end -- newseq ? )
     [ tail? ] [ head-slice* ] ?chomp ;
 
-<PRIVATE
-
 : subseq-range ( seq subseq -- from/f to/f )
-    [ subseq-index ] keep [ dupd length + ] curry [ f f ] if* ; inline
+    tuck subseq-index [ dup rot length + ] [ drop f f ] if* ;
 
-: (split1) ( seq subseq snip-quot -- before after )
-    [ [ subseq-range ] keepd over ] dip [ 2nip f ] if ; inline
+: ?snip ( from/f to/f seq -- before after )
+    over [ snip ] [ 2nip f ] if ; inline
 
-PRIVATE>
+: ?snip-slice ( from/f to/f seq -- before after )
+    over [ snip-slice ] [ 2nip f ] if ; inline
 
 : split1 ( seq subseq -- before after )
-    [ snip ] (split1) ;
+    [ subseq-range ] keepd ?snip ; inline
 
 : split1-slice ( seq subseq -- before-slice after-slice )
-    [ snip-slice ] (split1) ;
+    [ subseq-range ] keepd ?snip-slice ; inline
 
 : split-subseq ( seq subseq -- seqs )
     [
@@ -51,18 +50,11 @@ PRIVATE>
 : replace ( seq old new -- new-seq )
     pick [ [ split-subseq ] dip ] dip join-as ;
 
-<PRIVATE
-
-: (split1-when) ( ... seq quot: ( ... elt -- ... ? ) snip-quot -- ... before-slice after-slice )
-    [ dupd find drop ] dip [ swap [ dup 1 + ] dip ] prepose [ f ] if* ; inline
-
-PRIVATE>
-
 : split1-when ( ... seq quot: ( ... elt -- ... ? ) -- ... before after )
-    [ snip ] (split1-when) ; inline
+    [ find drop ] keepd swap [ dup 1 + rot snip ] [ f ] if* ; inline
 
 : split1-when-slice ( ... seq quot: ( ... elt -- ... ? ) -- ... before-slice after-slice )
-    [ snip-slice ] (split1-when) ; inline
+    [ find drop ] keepd swap [ dup 1 + rot snip-slice ] [ f ] if* ; inline
 
 : split1-last ( seq subseq -- before after )
     [ <reversed> ] bi@ split1 [ reverse ] bi@