LetExp([ TypeDec[ (intlist, RecordTy[ (hd,true,int), (tl,true,intlist)])], FunctionDec[ (printint,[ (i,true,int)], NONE, LetExp([ FunctionDec[ (f,[ (i,true,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")]))))), (printlist,[ (il,true,intlist)], NONE, IfExp( OpExp(EqOp, VarExp( SimpleVar(il)), NilExp), CallExp(print,[ StringExp("[] ")]), SeqExp[ CallExp(print,[ StringExp("[")]), CallExp(printint,[ VarExp( FieldVar( SimpleVar(il), hd))]), WhileExp( OpExp(NeqOp, VarExp( FieldVar( SimpleVar(il), tl)), NilExp), SeqExp[ CallExp(print,[ StringExp(", ")]), CallExp(printint,[ VarExp( FieldVar( FieldVar( SimpleVar(il), tl), hd))]), AssignExp( SimpleVar(il), VarExp( FieldVar( SimpleVar(il), tl)))]), CallExp(print,[ StringExp("] ")])])), (append,[ (il1,true,intlist), (il2,true,intlist)], SOME(intlist), IfExp( OpExp(EqOp, VarExp( SimpleVar(il1)), NilExp), VarExp( SimpleVar(il2)), LetExp([ VarDec(newl,true,SOME(intlist), RecordExp(intlist,[ (hd, VarExp( FieldVar( SimpleVar(il1), hd))), (tl, CallExp(append,[ VarExp( FieldVar( SimpleVar(il1), tl)), VarExp( SimpleVar(il2))]))]))], VarExp( SimpleVar(newl)))))], VarDec(lis0,true,SOME(intlist), NilExp), VarDec(lis1,true,SOME(intlist), RecordExp(intlist,[ (hd, IntExp(0)), (tl, RecordExp(intlist,[ (hd, IntExp(1)), (tl, RecordExp(intlist,[ (hd, IntExp(2)), (tl, NilExp)]))]))])), VarDec(lis2,true,SOME(intlist), RecordExp(intlist,[ (hd, IntExp(3)), (tl, RecordExp(intlist,[ (hd, IntExp(4)), (tl, RecordExp(intlist,[ (hd, IntExp(5)), (tl, NilExp)]))]))]))], SeqExp[ CallExp(printlist,[ VarExp( SimpleVar(lis0))]), CallExp(printlist,[ VarExp( SimpleVar(lis1))]), CallExp(printlist,[ VarExp( SimpleVar(lis2))]), CallExp(printlist,[ CallExp(append,[ VarExp( SimpleVar(lis1)), VarExp( SimpleVar(lis2))])]), CallExp(printlist,[ CallExp(append,[ VarExp( SimpleVar(lis0)), VarExp( SimpleVar(lis2))])])])