]> gitweb.factorcode.org Git - factor.git/commitdiff
sequences.extras: make loop>array faster using produce.
authorJohn Benediktsson <mrjbq7@gmail.com>
Mon, 30 Nov 2020 21:01:29 +0000 (13:01 -0800)
committerJohn Benediktsson <mrjbq7@gmail.com>
Mon, 30 Nov 2020 21:01:29 +0000 (13:01 -0800)
extra/sequences/extras/extras.factor

index 5fa817f77bd9942eeb556645775b348883363fad..86f00f293bcf7b5db2f3d90ee68a8c4f503c1639 100644 (file)
@@ -444,31 +444,23 @@ PRIVATE>
 : last? ( ... seq quot: ( ... elt -- ... ? ) -- ... ? ) [ last ] dip call ; inline
 : nth? ( ... n seq quot: ( ... elt -- ... ? ) -- ... ? ) [ nth ] dip call ; inline
 
-: loop>sequence ( quot: ( ..a -- ..a obj/f ) exemplar -- seq )
-   [ '[ [ @ [ [ , ] when* ] keep ] loop ] ] dip make ; inline
+: loop>sequence** ( ... quot: ( ... -- ... obj ? ) exemplar -- ... seq )
+    [ ] swap produce-as nip ; inline
 
-: loop>array ( quot: ( ..a -- ..a obj/f ) -- array )
-   { } loop>sequence ; inline
+: loop>array** ( ... quot: ( ... -- ... obj ? ) -- ... array )
+    { } loop>sequence** ; inline
 
-: loop>sequence* ( quot: ( ..a -- ..a obj ? ) exemplar -- seq )
+: loop>sequence* ( ... quot: ( ... -- ... obj ? ) exemplar -- ... seq )
     [ '[ [ @ [ [ , ] when* ] [ ] bi* ] loop ] ] dip make ; inline
 
-: loop>array* ( quot: ( ..a -- ..a obj ? ) -- array )
-   { } loop>sequence* ; inline
+: loop>array* ( ... quot: ( ... -- ... obj ? ) -- ... array )
+    { } loop>sequence* ; inline
 
-: loop>sequence** ( quot: ( ..a -- ..a obj ? ) exemplar -- seq )
-    [
-        '[
-            [
-                @
-                [ [ , ] [ drop ] if ]
-                [ nip ] 2bi
-            ] loop
-        ]
-    ] dip make ; inline
-
-: loop>array** ( quot: ( ..a -- ..a obj ? ) -- array )
-   { } loop>sequence** ; inline
+: loop>sequence ( ... quot: ( ... -- ... obj/f ) exemplar -- ... seq )
+    [ [ dup ] compose ] dip loop>sequence** ; inline
+
+: loop>array ( ... quot: ( ... -- ... obj/f ) -- ... array )
+   { } loop>sequence ; inline
 
 : with-pre-incrementer ( quot: ( ..a n -- ..a obj/f ) seq -- quot: ( ..a n -- ..a obj/f ) )
     [ -1 ] 2dip