- let macro, ts = match get_head ts with
- | Some (macro, ts) -> macro, ts
- | None -> "APPL", ts
- in
- let riss = L.rev_map (proc_term st []) ts in
- T.Macro macro :: T.mk_rev_args riss is
+ begin match get_head ts with
+ | None ->
+ let riss = L.rev_map (proc_term st []) ts in
+ T.Macro "APPL" :: T.mk_rev_args riss is
+ | Some (macro, s, [], ts)
+ | Some (macro, s, ts, []) ->
+ let riss = L.rev_map (proc_term st []) ts in
+ T.Macro macro :: T.free s :: T.mk_rev_args riss is
+ | Some (macro, s, ts1, ts2) ->
+ let riss1 = L.rev_map (proc_term st []) ts1 in
+ let riss2 = L.rev_map (proc_term st []) ts2 in
+ T.Macro macro :: T.free s :: T.mk_rev_args riss1 (T.mk_rev_args riss2 is)
+ end