]> gitweb.factorcode.org Git - factor.git/commitdiff
math: speed up (find-integer) and (all-integers?) by removing curry.
authorJohn Benediktsson <mrjbq7@gmail.com>
Tue, 5 Mar 2013 01:32:11 +0000 (17:32 -0800)
committerJohn Benediktsson <mrjbq7@gmail.com>
Tue, 5 Mar 2013 01:32:11 +0000 (17:32 -0800)
core/math/math.factor

index 20593bd48a89e1db518b1e3acf91e687f84adc9c..b7ef811d3aad9d4e09e79e8ccb7517b87cbf0d5a 100644 (file)
@@ -144,6 +144,9 @@ GENERIC: prev-float ( m -- n )
     #! Apply quot to i, keep i and quot, hide n.
     [ nip call ] 3keep ; inline
 
+: iterate-rot ( ? i n quot -- i n quot ? )
+    [ rot ] dip swap ; inline
+
 : iterate-next ( i n quot -- i' n quot ) [ 1 + ] 2dip ; inline
 
 PRIVATE>
@@ -152,18 +155,16 @@ PRIVATE>
     [ iterate-step iterate-next (each-integer) ]
     [ 3drop ] if-iterate? ; inline recursive
 
-: (find-integer) ( ... i n quot: ( ... i -- ... ? ) -- ... i )
+: (find-integer) ( ... i n quot: ( ... i -- ... ? ) -- ... i/f )
     [
-        iterate-step
-        [ [ ] ] 2dip
-        [ iterate-next (find-integer) ] 2curry bi-curry if
+        iterate-step iterate-rot
+        [ 2drop ] [ iterate-next (find-integer) ] if
     ] [ 3drop f ] if-iterate? ; inline recursive
 
 : (all-integers?) ( ... i n quot: ( ... i -- ... ? ) -- ... ? )
     [
-        iterate-step
-        [ iterate-next (all-integers?) ] 3curry
-        [ f ] if
+        iterate-step iterate-rot
+        [ iterate-next (all-integers?) ] [ 3drop f ] if
     ] [ 3drop t ] if-iterate? ; inline recursive
 
 : each-integer ( ... n quot: ( ... i -- ... ) -- ... )