-- The Computer Language Shootout -- http://shootout.alioth.debian.org/ -- contributed by Mike Pall local function ack(m, n) if m == 0 then return n+1 end if n == 0 then return ack(m-1, 1) end return ack(m-1, (ack(m, n-1))) -- The parentheses are deliberate. end local function fib(n) if n < 2 then return 1 end return fib(n-2) + fib(n-1) end local function tak(x, y, z) if y >= x then return z end return tak(tak(x-1, y, z), tak(y-1, z, x), (tak(z-1, x, y))) end local write, format = io.write, string.format local n = tonumber(arg[1]) - 1 write(format("Ack(3,%d): %d\n", n+1, ack(3, n+1))) write(format("Fib(%.1f): %.1f\n", n+28.0, fib(n+28.0))) write(format("Tak(%d,%d,%d): %d\n", 3*n, 2*n, n, tak(3*n, 2*n, n))) write(format("Fib(3): %d\n", fib(3))) write(format("Tak(3.0,2.0,1.0): %.1f\n", tak(3.0, 2.0, 1.0)))