in snd ++ (aux [])\r
;;\r
\r
+let index_of x =\r
+ let rec aux n =\r
+ function\r
+ [] -> None\r
+ | x'::_ when x == x' -> Some n\r
+ | _::xs -> aux (n+1) xs\r
+ in aux 1\r
+;;\r
+\r
+let sep_of_app =\r
+ let apps = ref [] in\r
+ function\r
+ r when not !r -> " "\r
+ | r ->\r
+ let i =\r
+ match index_of r !apps with\r
+ Some i -> i\r
+ | None ->\r
+ apps := !apps @ [r];\r
+ List.length !apps\r
+ in "," ^ string_of_int i ^ " "\r
+;;\r
+\r
let string_of_t =\r
let string_of_bvar =\r
let bound_vars = ["x"; "y"; "z"; "w"; "q"] in\r
| A _\r
| L _ as t -> "(" ^ string_of_term_no_pars level t ^ ")"\r
and string_of_term_no_pars_app level = function\r
- | A(b,t1,t2) -> string_of_term_no_pars_app level t1 ^ (if !b then "," else " ") ^ string_of_term_w_pars level t2\r
+ | A(b,t1,t2) -> string_of_term_no_pars_app level t1 ^ sep_of_app b ^ string_of_term_w_pars level t2\r
| _ as t -> string_of_term_w_pars level t\r
and string_of_term_no_pars level = function\r
| L(_,t) -> "λ" ^ string_of_bvar level ^ ". " ^ string_of_term_no_pars (level+1) t\r