let right_arrow = "→"
let left_arrow = "←"
let epsilon = "ϵ"
+let bullet = "•"
let big_sigma = "∑"
let cap = "∩"
let cup = "∪"
match l with
[] -> ()
| [ e ] -> printer fmt e
- | e :: es -> printer fmt e; List.iter
+ | e :: es -> printer fmt e;
+ List.iter
(fun x ->
sep fmt ();
fprintf fmt "%a" printer x) es
+
+let pp_print_range ?(sep=dummy_printer) printer fmt (first, last) =
+ for i = first to last - 1 do
+ printer fmt i;
+ sep fmt ();
+ done;
+ if first <= last then printer fmt last
+
let pp_print_array ?(sep=dummy_printer) printer fmt a =
- pp_print_list ~sep:sep printer fmt (Array.to_list a)
+ pp_print_range ~sep:sep (fun fmt i -> printer fmt a.(i)) fmt
+ (0, (Array.length a - 1))
-let print_list ?(sep=" ") printer fmt l =
+let with_printer (f : ?sep:('a) -> 'b) strsep pr fmt =
let sep_printer fmt () =
- pp_print_string fmt sep
+ pp_print_string fmt strsep
in
- pp_print_list ~sep:sep_printer printer fmt l
+ fun x -> f ~sep:sep_printer pr fmt x
-let print_array ?(sep=" ") printer fmt a =
- print_list ~sep:sep printer fmt (Array.to_list a)
+let print_list ?(sep=" ") printer fmt l =
+ with_printer pp_print_list sep printer fmt l
+
+let print_array ?(sep=" ") printer fmt a =
+ with_printer pp_print_array sep printer fmt a
+let print_range ?(sep=" ") printer fmt r =
+ with_printer pp_print_range sep printer fmt r