LetExp([ TypeDec[ (any, RecordTy[ (any,true,int)])], VarDec(buffer,true,NONE, CallExp(getchar,[])), FunctionDec[ (readint,[ (any,true,any)], SOME(int), LetExp([ VarDec(i,true,NONE, IntExp(0)), FunctionDec[ (isdigit,[ (s,true,string)], SOME(int), IfExp( OpExp(GeOp, CallExp(ord,[ VarExp( SimpleVar(s))]), CallExp(ord,[ StringExp("0")])), OpExp(LeOp, CallExp(ord,[ VarExp( SimpleVar(s))]), CallExp(ord,[ StringExp("9")])), IntExp(0))), (skipto,[ ], NONE, WhileExp( IfExp( OpExp(EqOp, VarExp( SimpleVar(buffer)), StringExp(" ")), IntExp(1), OpExp(EqOp, VarExp( SimpleVar(buffer)), StringExp(" "))), AssignExp( SimpleVar(buffer), CallExp(getchar,[]))))]], SeqExp[ CallExp(skipto,[]), AssignExp( FieldVar( SimpleVar(any), any), CallExp(isdigit,[ VarExp( SimpleVar(buffer))])), WhileExp( CallExp(isdigit,[ VarExp( SimpleVar(buffer))]), SeqExp[ AssignExp( SimpleVar(i), OpExp(MinusOp, OpExp(PlusOp, OpExp(TimesOp, VarExp( SimpleVar(i)), IntExp(10)), CallExp(ord,[ VarExp( SimpleVar(buffer))])), CallExp(ord,[ StringExp("0")]))), AssignExp( SimpleVar(buffer), CallExp(getchar,[]))]), VarExp( SimpleVar(i))]))], TypeDec[ (list, RecordTy[ (first,true,int), (rest,true,list)])], FunctionDec[ (readlist,[ ], SOME(list), LetExp([ VarDec(any,true,NONE, RecordExp(any,[ (any, IntExp(0))])), VarDec(i,true,NONE, CallExp(readint,[ VarExp( SimpleVar(any))]))], IfExp( VarExp( FieldVar( SimpleVar(any), any)), RecordExp(list,[ (first, VarExp( SimpleVar(i))), (rest, CallExp(readlist,[]))]), NilExp))), (merge,[ (a,true,list), (b,true,list)], SOME(list), IfExp( OpExp(EqOp, VarExp( SimpleVar(a)), NilExp), VarExp( SimpleVar(b)), IfExp( OpExp(EqOp, VarExp( SimpleVar(b)), NilExp), VarExp( SimpleVar(a)), IfExp( OpExp(LtOp, VarExp( FieldVar( SimpleVar(a), first)), VarExp( FieldVar( SimpleVar(b), first))), RecordExp(list,[ (first, VarExp( FieldVar( SimpleVar(a), first))), (rest, CallExp(merge,[ VarExp( FieldVar( SimpleVar(a), rest)), VarExp( SimpleVar(b))]))]), RecordExp(list,[ (first, VarExp( FieldVar( SimpleVar(b), first))), (rest, CallExp(merge,[ VarExp( SimpleVar(a)), VarExp( FieldVar( SimpleVar(b), rest))]))]))))), (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,[ (l,true,list)], NONE, IfExp( OpExp(EqOp, VarExp( SimpleVar(l)), NilExp), CallExp(print,[ StringExp(" ")]), SeqExp[ CallExp(printint,[ VarExp( FieldVar( SimpleVar(l), first))]), CallExp(print,[ StringExp(" ")]), CallExp(printlist,[ VarExp( FieldVar( SimpleVar(l), rest))])]))], VarDec(list1,true,NONE, CallExp(readlist,[])), VarDec(list2,true,NONE, SeqExp[ AssignExp( SimpleVar(buffer), CallExp(getchar,[])), CallExp(readlist,[])])], CallExp(printlist,[ CallExp(merge,[ VarExp( SimpleVar(list1)), VarExp( SimpleVar(list2))])]))