]> gitweb.factorcode.org Git - factor.git/commitdiff
sequences: adding cut-slice*.
authorJohn Benediktsson <mrjbq7@gmail.com>
Tue, 16 Mar 2021 21:44:33 +0000 (14:44 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Tue, 16 Mar 2021 21:44:33 +0000 (14:44 -0700)
core/sequences/sequences-docs.factor
core/sequences/sequences.factor
extra/sequences/extras/extras.factor

index 85613f68c9f79ff4cafcbf7a50b66fa3786966e3..f9a6bcd3027f9e1e62a273c436ae51b4ad84d8e4 100644 (file)
@@ -1146,7 +1146,7 @@ HELP: tail*
 
 { tail tail* tail-slice tail-slice* } related-words
 { head head* head-slice head-slice* } related-words
-{ cut cut* cut-slice } related-words
+{ cut cut* cut-slice cut-slice* } related-words
 { unclip unclip-slice unclip-last unclip-last-slice } related-words
 { first last but-last but-last-slice rest rest-slice } related-words
 
@@ -1172,9 +1172,14 @@ HELP: tail?
 { remove remove-nth remove-eq remove-eq! remove! remove-nth! } related-words
 
 HELP: cut-slice
-{ $values { "seq" sequence } { "n" "a non-negative integer" } { "before-slice" sequence } { "after-slice" "a slice" } }
-{ $description "Outputs a pair of sequences, where " { $snippet "before" } " consists of the first " { $snippet "n" } " elements of " { $snippet "seq" } " and has the same type, while " { $snippet "after" } " is a slice of the remaining elements." }
-{ $notes "Unlike " { $link cut } ", the run time of this word is proportional to the length of " { $snippet "before" } ", not " { $snippet "after" } ", so it is suitable for use in an iterative algorithm which cuts successive pieces off a sequence." } ;
+{ $values { "seq" sequence } { "n" "a non-negative integer" } { "before-slice" "a slice" } { "after-slice" "a slice" } }
+{ $description "Outputs a pair of sequences, where " { $snippet "before-slice" } " is a slice of the first " { $snippet "n" } " elements of " { $snippet "seq" } ", while " { $snippet "after-slice" } " is a slice of the remaining elements." }
+{ $notes "Unlike " { $link cut } ", this is suitable for use in an iterative algorithm which cuts successive pieces off a sequence." } ;
+
+HELP: cut-slice*
+{ $values { "seq" sequence } { "n" "a non-negative integer" } { "before-slice" "a slice" } { "after-slice" "a slice" } }
+{ $description "Outputs a pair of sequences, where " { $snippet "after" } " consists of the last " { $snippet "n" } " elements of " { $snippet "seq" } ", while " { $snippet "before-slice" } " is a slice of the remaining elements." }
+{ $notes "Unlike " { $link cut* } ", this is suitable for use in an iterative algorithm which cuts successive pieces off a sequence." } ;
 
 HELP: cut
 { $values { "seq" sequence } { "n" "a non-negative integer" } { "before" sequence } { "after" sequence } }
index 37def46ded4299e70f0ec909da82bfc1a977c576..3099c5918088a958d622ab2be5c5db7598919c0d 100644 (file)
@@ -956,6 +956,9 @@ PRIVATE>
 : cut-slice ( seq n -- before-slice after-slice )
     [ head-slice ] [ tail-slice ] 2bi ; inline
 
+: cut-slice* ( seq n -- before-slice after-slice )
+    [ head-slice* ] [ tail-slice* ] 2bi ;
+
 : insert-nth ( elt n seq -- seq' )
     swap cut-slice [ swap suffix ] dip append ;
 
index a418da6a4c821292034cd5848e566834c4462cf0..5589c8caec12bd9421c83e9e29ea4046edb57371 100644 (file)
@@ -131,9 +131,6 @@ PRIVATE>
         [ seq <slice> ] keep len or swap
     ] produce nip ; inline
 
-: cut-slice* ( seq n -- before after )
-    [ head-slice* ] [ tail-slice* ] 2bi ;
-
 : ?<slice> ( from/f to/f sequence -- slice )
     [ [ 0 ] unless* ] 2dip
     over [ nip [ length ] [ ] bi ] unless