$ include "seed7_05.s7i"; include "bigint.s7i"; const func bigInteger: ackermann (in bigInteger: m, in bigInteger: n) is func result var bigInteger: ackermann is 0_; begin case m of when {0_}: ackermann := succ(n); when {1_}: ackermann := n + 2_; when {2_}: ackermann := 3_ + 2_ * n; when {3_}: ackermann := 5_ + 8_ * pred(2_ ** ord(n)); otherwise: if n = 0_ then ackermann := ackermann(pred(m), 1_); else ackermann := ackermann(pred(m), ackermann(m, pred(n))); end if; end case; end func; const proc: main is func local var bigInteger: m is 0_; var bigInteger: n is 0_; var string: stri is ""; begin for m range 0_ to 3_ do for n range 0_ to 9_ do writeln("A(" <& m <& ", " <& n <& ") = " <& ackermann(m, n)); end for; end for; writeln("A(4, 0) = " <& ackermann(4_, 0_)); writeln("A(4, 1) = " <& ackermann(4_, 1_)); stri := str(ackermann(4_, 2_)); writeln("A(4, 2) = (" <& length(stri) <& " digits)"); writeln(stri[1 len 80]); writeln("..."); writeln(stri[length(stri) - 79 ..]); end func;