Source file seq_utils_.ml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
let zero_to_n_exc n : int Seq.t =
let rec aux cur n =
if cur < n then fun () -> Seq.Cons (cur, aux (cur + 1) n) else Seq.empty
in
aux 0 n
let zero_to_n_inc n = zero_to_n_exc (n + 1)
let mapi (f : int -> 'a -> 'b) (s : 'a Seq.t) : 'b Seq.t =
let rec aux f cur s =
match s () with
| Seq.Nil -> Seq.empty
| Seq.Cons (x, rest) ->
fun () ->
Seq.Cons (f cur x, aux f (succ cur) rest)
in
aux f 0 s
let iter ?sep:(pp_sep = Format.pp_print_cut) iter pp_elt ppf v =
let is_first = ref true in
let pp_elt v =
if !is_first then (is_first := false) else pp_sep ppf ();
pp_elt ppf v
in
iter pp_elt v
let pp ?sep pp_elt = iter ?sep Seq.iter pp_elt