]> gitweb.factorcode.org Git - factor.git/blobdiff - core/splitting/splitting.factor
splitting: simpler split
[factor.git] / core / splitting / splitting.factor
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@