]> gitweb.factorcode.org Git - factor.git/commitdiff
Clean up recursive benchmark a tad
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Sat, 19 Apr 2008 07:11:18 +0000 (02:11 -0500)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Sat, 19 Apr 2008 07:11:18 +0000 (02:11 -0500)
extra/benchmark/recursive/recursive.factor

index ee66e303ec0a65ada329fbc614653d60179060c3..f69547df6069cc9852a7a2b2c536d3be60297e8e 100755 (executable)
@@ -1,38 +1,37 @@
+USING: math kernel hints prettyprint io combinators ;
 IN: benchmark.recursive
-USING: math kernel hints prettyprint io ;
 
 : fib ( m -- n )
-    dup 2 < [ drop 1 ] [ dup 1 - fib swap 2 - fib + ] if ;
+    dup 2 < [ drop 1 ] [ [ 1 - fib ] [ 2 - fib ] bi + ] if ;
+    inline
 
 : ack ( m n -- x )
-    over zero? [
-        nip 1+
-    ] [
-        dup zero? [
-            drop 1- 1 ack
-        ] [
-            dupd 1- ack >r 1- r> ack
-        ] if
-    ] if ;
+    {
+        { [ over zero? ] [ nip 1+ ] }
+        { [ dup zero? ] [ drop 1- 1 ack ] }
+        [ [ drop 1- ] [ 1- ack ] 2bi ack ]
+    } cond ; inline
 
 : tak ( x y z -- t )
-    2over swap < [
-        [ rot 1- -rot tak ] 3keep
-        [ -rot 1- -rot tak ] 3keep
-        1- -rot tak
-        tak
-    ] [
+    2over <= [
         2nip
-    ] if ;
+    ] [
+        [  rot 1- -rot tak ]
+        [ -rot 1- -rot tak ]
+        [      1- -rot tak ]
+        3tri
+        tak
+    ] if ; inline
 
 : recursive ( n -- )
-    3 over ack . flush
-    dup 27.0 + fib . flush
-    1-
-    dup 3 * over 2 * rot tak . flush
+    [ 3 swap ack . flush ]
+    [ 27.0 + fib . flush ]
+    [ 1- [ 3 * ] [ 2 * ] [ ] tri tak . flush ] tri
     3 fib . flush
     3.0 2.0 1.0 tak . flush ;
 
+HINTS: recursive fixnum ;
+
 : recursive-main 11 recursive ;
 
 MAIN: recursive-main