From ff95c179728a49897da04f128d8c44ab4d930bca Mon Sep 17 00:00:00 2001 From: John Benediktsson Date: Mon, 4 Mar 2013 17:32:11 -0800 Subject: [PATCH] math: speed up (find-integer) and (all-integers?) by removing curry. --- core/math/math.factor | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/core/math/math.factor b/core/math/math.factor index 20593bd48a..b7ef811d3a 100644 --- a/core/math/math.factor +++ b/core/math/math.factor @@ -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 -- ... ) -- ... )