you might consider adding an integer return type:
define method tak
(x :: <integer>, y :: <integer>, z :: <integer>) => (res :: <integer>)
if (y >= x)
z
else
tak(tak(x - 1, y, z),
tak(y - 1, z, x),
tak(z - 1, x, y))
end if
end;
jonathan bachrach