AckerMann

Ackermann

Ackermann Euphoria

-- The Computer Language Shootout Benchmarks 
--   http://shootout.alioth.debian.org/ 
-- 
--   contributed by Derek Parnell 
-- 
--   run: exu ackermann.ex [N=1] 
 
without warning 
without type_check 
 
include get.e 
 
 
 
function Ack(integer M, integer N)  
    if M = 0 then 
        return N+1 
    elsif N = 0 then 
        return Ack(M-1,1) 
    end if 
    return Ack(M-1, Ack(M, N-1)) 
end function 
 
 
 
procedure main(sequence argv) 
 
    object n 
    if length(argv) >= 3 then 
      n = value(argv[3]) 
      n = n[2] 
    else 
      n = 1 
    end if 
 
    printf(1, "Ack(3,%d): %d\n", {n, Ack(3, n)}) 
end procedure 
 
 
main(command_line()) 

Ackermann Python

#!/usr/local/bin/python 
# $Id: ackermann.python,v 1.7 2001/03/16 15:57:34 doug Exp $ 
# http://www.bagley.org/~doug/shootout/ 
# from Brad Knotwell 
 
import sys 
 
def Ack(M, N): 
    if (not M): 
        return( N + 1 ) 
    if (not N): 
        return( Ack(M-1, 1) ) 
    return( Ack(M-1, Ack(M, N-1)) ) 
 
def main(): 
    NUM = int(sys.argv[1]) 
    sys.setrecursionlimit(30000) 
    print "Ack(3,%d): %d" % (NUM, Ack(3, NUM)) 
 
main() 
	 

Ackermann Perl

#!/usr/local/bin/perl 
# $Id: ackermann.perl,v 1.9 2001/05/04 01:21:38 doug Exp $ 
# http://www.bagley.org/~doug/shootout/ 
use strict; 
use integer; 
 
# It's prettier but slower to do this 
#sub Ack { 
#    my($M, $N) = @_; 
#    return( $N + 1 )         if ($M == 0); 
#    return( Ack($M - 1, 1) ) if ($N == 0); 
#    Ack($M - 1, Ack($M, $N - 1)); 
#} 
 
# in our quest for speed, we must get ugly: 
# it helps reduce stack frame size a little bit 
# from Leif Stensson 
sub Ack { 
    return $_[0] ? ($_[1] ? Ack($_[0]-1, Ack($_[0], $_[1]-1)) 
            : Ack($_[0]-1, 1)) 
    : $_[1]+1; 
} 
 
my $NUM = $ARGV[0]; 
$NUM = 1 if ($NUM < 1); 
my $ack = Ack(3, $NUM); 
print "Ack(3,$NUM): $ack\n"; 
	 

Search



Quick Links

User menu

Not signed in.

Misc Menu