procedure acker(i,j)
   local args, k
   static ackermem
   initial ackermem := table()
   args := i || "," || j
   if k := \ackermem[args] then return k
   if i = 0 then return ackermem[args] := j + 1
   if j = 0 then return ackermem[args] := acker(i - 1,1)
   return ackermem[args] := acker(i - 1,acker(i,j - 1))
end
