{ { "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
-USING: hints kernel math sequences strings ;
-
+USING: hints kernel math sequences sequences.private strings ;
IN: splitting.extras
<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 )