LetExp([ FunctionDec[ (printint,[ (i,false,int)], NONE, LetExp([ FunctionDec[ (f,[ (i,false,int)], NONE, IfExp( OpExp(GtOp, VarExp( SimpleVar(i)), IntExp(0)), SeqExp[ CallExp(f,[ OpExp(DivideOp, VarExp( SimpleVar(i)), IntExp(10))]), CallExp(print,[ CallExp(chr,[ OpExp(PlusOp, OpExp(MinusOp, VarExp( SimpleVar(i)), OpExp(TimesOp, OpExp(DivideOp, VarExp( SimpleVar(i)), IntExp(10)), IntExp(10))), CallExp(ord,[ StringExp("0")]))])])]))]], IfExp( OpExp(LtOp, VarExp( SimpleVar(i)), IntExp(0)), SeqExp[ CallExp(print,[ StringExp("-")]), CallExp(f,[ OpExp(MinusOp, IntExp(0), VarExp( SimpleVar(i)))])], IfExp( OpExp(GtOp, VarExp( SimpleVar(i)), IntExp(0)), CallExp(f,[ VarExp( SimpleVar(i))]), CallExp(print,[ StringExp("0")])))))]], LetExp([ VarDec(v1,false,NONE, IntExp(1)), VarDec(v2,true,NONE, IntExp(2)), VarDec(v3,true,NONE, IntExp(3)), FunctionDec[ (find1,[ (curval,false,int)], SOME(int), LetExp([ VarDec(v1,true,NONE, IntExp(4)), VarDec(v5,true,NONE, IntExp(5)), FunctionDec[ (find2,[ (c1,false,int), (c2,false,int), (c3,false,int)], SOME(int), LetExp([ VarDec(v6,false,NONE, IntExp(6)), VarDec(v7,false,NONE, IntExp(7)), VarDec(v8,false,NONE, IntExp(8))], SeqExp[ AssignExp( SimpleVar(v8), OpExp(PlusOp, OpExp(PlusOp, OpExp(PlusOp, VarExp( SimpleVar(v8)), VarExp( SimpleVar(c1))), VarExp( SimpleVar(c2))), VarExp( SimpleVar(c3)))), OpExp(PlusOp, OpExp(PlusOp, OpExp(PlusOp, OpExp(PlusOp, OpExp(PlusOp, VarExp( SimpleVar(v1)), VarExp( SimpleVar(v2))), VarExp( SimpleVar(v3))), VarExp( SimpleVar(v5))), OpExp(TimesOp, VarExp( SimpleVar(v6)), VarExp( SimpleVar(v7)))), VarExp( SimpleVar(v8)))]))]], OpExp(PlusOp, OpExp(PlusOp, CallExp(find2,[ VarExp( SimpleVar(v1)), VarExp( SimpleVar(curval)), VarExp( SimpleVar(v5))]), VarExp( SimpleVar(v1))), OpExp(TimesOp, VarExp( SimpleVar(v2)), VarExp( SimpleVar(curval))))))]], CallExp(printint,[ OpExp(PlusOp, CallExp(find1,[ VarExp( SimpleVar(v2))]), VarExp( SimpleVar(v3)))])))