read_list : () list(int)
print_list : (list(int))list(int)

rev_aux : (list(int),list(int))list(int)
reverse : (list(int))list(int)

main : ()int


fun rev_aux(l,acc) = match l with 
 nil => acc
| cons(d,h,t) => rev_aux(t,cons(d,h,acc))

fun reverse(l) = rev_aux(l,nil(int))


fun read_list() = match read_int() with
               [flag,val] => 
                  if flag == 1 then 
                    cons(new(),val,read_list())
                  else nil(int)


fun main() = print_string("Hello Martin!\n");
             print_string("Please enter a sequence of\n");
             print_string("numbers separated by RETURN and\n");
             print_string("terminated by a non-digit. \n");
             print_list(reverse(read_list()));0



fun print_list(l) = match l with 
              nil => nil(int)
           |  cons(d,h,t) => (print_int(h);cons(d,h,print_list(t)))

