]> gitweb.factorcode.org Git - factor.git/commitdiff
splitting.extras: Add split-head split-tail and slices.
authorDoug Coleman <doug.coleman@gmail.com>
Wed, 4 Nov 2020 02:21:57 +0000 (20:21 -0600)
committerDoug Coleman <doug.coleman@gmail.com>
Wed, 4 Nov 2020 02:26:19 +0000 (20:26 -0600)
extra/splitting/extras/extras-tests.factor
extra/splitting/extras/extras.factor

index 263275cb18b97e2579292ac012722ac8a44e4b1d..045f22e666fb6596cefc5c63c8988cebc8eb6d41 100644 (file)
@@ -37,3 +37,11 @@ tools.test ;
 { { "a" "b" "c" } } [ "a  b  c" " " split-harvest ] unit-test
 { { "a" "b" "c" } } [ " a  b  c" " " split-harvest ] unit-test
 { { "a" "b" "c" } } [ " a  b  c " " " split-harvest ] unit-test
+
+{ "s" "1:2:3s" } [
+    "s1:2:3s" [ letter? ] split-head
+] unit-test
+
+{ "s1:2:3" "s" } [
+    "s1:2:3s" [ letter? ] split-tail
+] unit-test
index 328c42ab67e7b27412592014a0e9e7f7bc256eb6..5f2a6c2b95128e91a0a3ca0f66cd8e11a40c4cff 100644 (file)
@@ -1,5 +1,4 @@
-USING: hints kernel math sequences strings ;
-
+USING: hints kernel math sequences sequences.private strings ;
 IN: splitting.extras
 
 <PRIVATE
@@ -33,6 +32,18 @@ PRIVATE>
     [ [ [ 1 ] when-zero cut-slice swap ] [ f swap ] if* ] compose
     compose produce nip ; inline
 
+: split-head ( seq quot -- before after )
+    (trim-head) cut ; inline
+
+: split-tail ( seq quot -- before after )
+    (trim-tail) cut ; inline
+
+: split-head-slice ( seq quot -- before after )
+    (trim-head) cut-slice ; inline
+
+: split-tail-slice ( seq quot -- before after )
+    (trim-tail) cut-slice ; inline
+
 <PRIVATE
 
 : (split-harvest) ( seq quot: ( ... elt -- ... ? ) slice-quot -- pieces )