let rec print_aexp (a: aexp) = match a with
N(n) -> "N("^ (string_of_int n) ^")"
| R(f) -> "R("^ (string_of_float f) ^")"
| Var(id) -> "Var("^ (print_ide id) ^")"
| Vec(id,ex) -> "Vec("^ (print_ide id) ^","^ (print_aexp ex) ^")"
| Mat(id,ex1,ex2) -> "Mat("^ (print_ide id) ^","^ (print_aexp ex1) ^","^ (print_aexp ex2) ^")"
| Sum(ex1,ex2) -> "Sum("^ (print_aexp ex2) ^","^ (print_aexp ex2) ^")"
| Sub(ex1,ex2) -> "Sub("^ (print_aexp ex2) ^","^ (print_aexp ex2) ^")"
| Mul(ex1,ex2) -> "Mul("^ (print_aexp ex2) ^","^ (print_aexp ex2) ^")"
| Div(ex1,ex2) -> "Div("^ (print_aexp ex2) ^","^ (print_aexp ex2) ^")"
| FCall(id,exl) -> "FCall("^ (print_ide id) ^",["^ (print_string_list(List.map print_aexp exl)) ^"])"