factor/extra/benchmark/recursive/recursive.factor

38 lines
821 B
Factor
Raw Normal View History

2008-04-19 03:11:18 -04:00
USING: math kernel hints prettyprint io combinators ;
2007-09-20 18:09:08 -04:00
IN: benchmark.recursive
: fib ( m -- n )
2008-04-19 03:11:18 -04:00
dup 2 < [ drop 1 ] [ [ 1 - fib ] [ 2 - fib ] bi + ] if ;
2008-08-24 04:59:22 -04:00
inline recursive
2007-09-20 18:09:08 -04:00
: ack ( m n -- x )
2008-04-19 03:11:18 -04:00
{
{ [ over zero? ] [ nip 1+ ] }
{ [ dup zero? ] [ drop 1- 1 ack ] }
[ [ drop 1- ] [ 1- ack ] 2bi ack ]
2008-08-24 04:59:22 -04:00
} cond ; inline recursive
2007-09-20 18:09:08 -04:00
: tak ( x y z -- t )
2008-04-19 03:11:18 -04:00
2over <= [
2007-09-20 18:09:08 -04:00
2nip
2008-04-19 03:11:18 -04:00
] [
[ rot 1- -rot tak ]
[ -rot 1- -rot tak ]
[ 1- -rot tak ]
3tri
tak
2008-08-24 04:59:22 -04:00
] if ; inline recursive
2007-09-20 18:09:08 -04:00
: recursive ( n -- )
2008-04-19 03:11:18 -04:00
[ 3 swap ack . flush ]
[ 27.0 + fib . flush ]
[ 1- [ 3 * ] [ 2 * ] [ ] tri tak . flush ] tri
2007-09-20 18:09:08 -04:00
3 fib . flush
3.0 2.0 1.0 tak . flush ;
2008-04-19 03:11:18 -04:00
HINTS: recursive fixnum ;
: recursive-main ( -- ) 11 recursive ;
2007-09-20 18:09:08 -04:00
MAIN: recursive-main