+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