local euclideRecursTrace(a,bbbbbb) =
local b = std.trace("euclideRecurs"+std.toString([a,bbbbbb]), bbbbbb);
# We need division to implement division! But x/10 can be implemented without / ...
local newN2(ax,n) =
if int.gt(int.mult(b, n), ax) then
n
else
newN2(ax,mult10(n));
local newN(ax,n) = std.trace("newN"+std.toString([ax,n]), div10(newN2(ax,n)));
local newQR2(bn,nx,qx,rx) =
if int.lt(rx, bn) then
[qx,rx]
else
newQR2(bn,nx,int.add(qx,nx),int.sub(rx,bn));
local newQR(nx,qx,rx) = std.trace("newQR"+std.toString([nx,qx,rx]), newQR2(int.mult(b, nx),nx,qx,rx));
local loop(ax,nx,qx,rxxx) =
local rx = std.trace("loop"+std.toString([ax,nx,qx,rxxx]), rxxx);
if int.lt(rx, b) then
[qx,rx]
else
local qxrx = newQR(newN(ax,nx),qx,rx);
loop(qxrx[1],1,qxrx[0],qxrx[1]);
loop(a,1,0,a),