RosettaCodeData/Task/Ackermann_function/Forth/ackermann_function-2.fth
Ingy döt Net 80737d5a6a new tasks
2013-04-09 00:46:50 -07:00

14 lines
443 B
Forth

: ackermann ( m n -- u )
over ( case statement)
0 over = if drop nip 1+ else
1 over = if drop nip 2 + else
2 over = if drop nip 2* 3 + else
3 over = if drop swap 5 + swap lshift 3 - else
drop swap 1- swap dup
if
1- over 1+ swap recurse recurse exit
else
1+ recurse exit \ allow tail recursion
then
then then then then
;