ack:
    procedure options(main,stack(2000));
    dcl
        (m,maxm,n,maxn) fixed;
    put skip list('Type max m,n: ');
    get list(maxm,maxn);
    put skip
        list('         ',(decimal(n,4) do n=0 to maxn));
        do m = 0 to maxm;
        put skip list(decimal(m,4),':');
            do n = 0 to maxn;
            put list(decimal(ackermann(m,n),4));
            end;
        end;
    stop;

    ackermann:
        procedure(m,n) returns(fixed) recursive;
        dcl (m,n) fixed;
        if m = 0 then
           return(n+1);
        if n = 0 then
            return(ackermann(m-1,1));
        return(ackermann(m-1,ackermann(m,n-1)));
        end ackermann;
    end ack;
