Added for_each and for_eachi

This commit is contained in:
Geoff Hulette 2022-01-07 13:11:48 -08:00
parent 40891d29aa
commit 84061bcb69
4 changed files with 33 additions and 9 deletions

1
.gitignore vendored
View file

@ -7,3 +7,4 @@ man/
*.install *.install
.merlin .merlin
.gh-pages .gh-pages
_opam

View file

@ -82,6 +82,10 @@ let iteri f seq =
f !r x; f !r x;
incr r) incr r)
let for_each seq f = iter f seq
let for_eachi seq f = iteri f seq
let fold f init seq = let fold f init seq =
let r = ref init in let r = ref init in
seq (fun elt -> r := f !r elt); seq (fun elt -> r := f !r elt);
@ -1232,14 +1236,14 @@ end
module Map = struct module Map = struct
module type S = sig module type S = sig
include Map.S include Map.S
val to_iter : 'a t -> (key * 'a) iter val to_iter : 'a t -> (key * 'a) iter
val of_iter : (key * 'a) iter -> 'a t val of_iter : (key * 'a) iter -> 'a t
val keys : 'a t -> key iter val keys : 'a t -> key iter
val values : 'a t -> 'a iter val values : 'a t -> 'a iter
val to_list : 'a t -> (key * 'a) list val to_list : 'a t -> (key * 'a) list
val of_list : (key * 'a) list -> 'a t val of_list : (key * 'a) list -> 'a t
val to_seq : 'a t -> (key * 'a) iter val to_seq : 'a t -> (key * 'a) iter
(** @deprecated use {!to_iter} instead *) (** @deprecated use {!to_iter} instead *)
val of_seq : (key * 'a) iter -> 'a t val of_seq : (key * 'a) iter -> 'a t
@ -1338,7 +1342,7 @@ let sample k seq =
if !i < k then if !i < k then
a.(!i) <- x a.(!i) <- x
else else
let j = Random.int (!i) in let j = Random.int (!i) in
if j < k then a.(j) <- x if j < k then a.(j) <- x
else () else ()
in in

View file

@ -39,7 +39,7 @@ type +'a t = ('a -> unit) -> unit
type +'a iter = 'a t type +'a iter = 'a t
(** {b NOTE} Type [('a, 'b) t2 = ('a -> 'b -> unit) -> unit] (** {b NOTE} Type [('a, 'b) t2 = ('a -> 'b -> unit) -> unit]
has been removed and subsumed by [('a * 'b) t] has been removed and subsumed by [('a * 'b) t]
@since 1.0 @since 1.0
*) *)
@ -118,7 +118,17 @@ val iter : ('a -> unit) -> 'a t -> unit
Basically [iter f seq] is just [seq f]. *) Basically [iter f seq] is just [seq f]. *)
val iteri : (int -> 'a -> unit) -> 'a t -> unit val iteri : (int -> 'a -> unit) -> 'a t -> unit
(** Iterate on elements and their index in the iterator *) (** Iterate on elements and their index in the iterator *)
val for_each : 'a t -> ('a -> unit) -> unit
(** Consume the iterator, passing all its arguments to the function.
[for_each seq f] is the same as [iter f seq], i.e., [iter] with
arguments reversed. *)
val for_eachi : 'a t -> (int -> 'a -> unit) -> unit
(** Iterate on elements and their index in the iterator.
[for_eachi seq f] is the same as [iteri f seq], i.e., [iteri] with
arguments reversed. *)
val fold : ('a -> 'b -> 'a) -> 'a -> 'b t -> 'a val fold : ('a -> 'b -> 'a) -> 'a -> 'b t -> 'a
(** Fold over elements of the iterator, consuming it *) (** Fold over elements of the iterator, consuming it *)
@ -686,7 +696,7 @@ module Map : sig
val to_list : 'a t -> (key * 'a) list val to_list : 'a t -> (key * 'a) list
val of_list : (key * 'a) list -> 'a t val of_list : (key * 'a) list -> 'a t
val to_seq : 'a t -> (key * 'a) iter val to_seq : 'a t -> (key * 'a) iter
(** @deprecated use {!to_iter} instead *) (** @deprecated use {!to_iter} instead *)
val of_seq : (key * 'a) iter -> 'a t val of_seq : (key * 'a) iter -> 'a t
@ -849,4 +859,3 @@ module IO : sig
string -> Bytes.t t -> unit string -> Bytes.t t -> unit
(** @since 0.5.4 *) (** @since 0.5.4 *)
end end

View file

@ -15,7 +15,7 @@ type +'a t = ('a -> unit) -> unit
type +'a iter = 'a t type +'a iter = 'a t
(** {b NOTE} Type [('a, 'b) t2 = ('a -> 'b -> unit) -> unit] (** {b NOTE} Type [('a, 'b) t2 = ('a -> 'b -> unit) -> unit]
has been removed and subsumed by [('a * 'b) t] has been removed and subsumed by [('a * 'b) t]
@since 1.0 @since 1.0
*) *)
@ -88,6 +88,16 @@ val iter : f:('a -> unit) -> 'a t -> unit
val iteri : f:(int -> 'a -> unit) -> 'a t -> unit val iteri : f:(int -> 'a -> unit) -> 'a t -> unit
(** Iterate on elements and their index in the iterator *) (** Iterate on elements and their index in the iterator *)
val for_each : seq:'a t -> ('a -> unit) -> unit
(** Consume the iterator, passing all its arguments to the function.
[for_each seq f] is the same as [iter f seq], i.e., [iter] with
arguments reversed. *)
val for_eachi : seq:'a t -> (int -> 'a -> unit) -> unit
(** Iterate on elements and their index in the iterator.
[for_eachi seq f] is the same as [iteri f seq], i.e., [iteri] with
arguments reversed. *)
val fold : f:('a -> 'b -> 'a) -> init:'a -> 'b t -> 'a val fold : f:('a -> 'b -> 'a) -> init:'a -> 'b t -> 'a
(** Fold over elements of the iterator, consuming it *) (** Fold over elements of the iterator, consuming it *)
@ -651,7 +661,7 @@ module Map : sig
val to_list : 'a t -> (key * 'a) list val to_list : 'a t -> (key * 'a) list
val of_list : (key * 'a) list -> 'a t val of_list : (key * 'a) list -> 'a t
val to_seq : 'a t -> (key * 'a) iter val to_seq : 'a t -> (key * 'a) iter
(** @deprecated use {!to_iter} instead *) (** @deprecated use {!to_iter} instead *)
val of_seq : (key * 'a) iter -> 'a t val of_seq : (key * 'a) iter -> 'a t