LetExp([ TypeDec[ (intlist, RecordTy[ (hd,true,int), (tl,true,intlist)])], VarDec(lis,true,SOME(intlist), RecordExp(intlist,[ (hd, IntExp(1)), (tl, RecordExp(intlist,[ (hd, IntExp(2)), (tl, NilExp)]))])), 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")])))))]], IfExp( OpExp(NeqOp, VarExp( FieldVar( SimpleVar(lis), tl)), NilExp), CallExp(printint,[ VarExp( FieldVar( FieldVar( SimpleVar(lis), tl), hd))]), CallExp(printint,[ VarExp( FieldVar( SimpleVar(lis), hd))])))