]> gitweb.factorcode.org Git - factor.git/blobdiff - extra/benchmark/recursive/recursive.factor
Delete empty unit tests files, remove 1- and 1+, reorder IN: lines in a lot of places...
[factor.git] / extra / benchmark / recursive / recursive.factor
index 6e3c201cf000bdb4c4b806a906b3e0834bcca3df..219c73ae0aa62a32ead0bf410b281e45cffe2be0 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 recursive
 
 : 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 recursive
 
 : tak ( x y z -- t )
-    pick pick 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
 
 : 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 ;
 
-: recursive-main 11 recursive ;
+HINTS: recursive fixnum ;
+
+: recursive-main ( -- ) 11 recursive ;
 
 MAIN: recursive-main