mirror of
https://github.com/c-cube/ocaml-containers.git
synced 2025-12-18 08:36:41 -05:00
added List.counts, related to List.count
This commit is contained in:
parent
3b1de9a1c8
commit
d304bca14a
3 changed files with 22 additions and 1 deletions
|
|
@ -382,6 +382,19 @@ let count f l =
|
||||||
count (fun x -> x mod 2 = 0) [2; 6; 9; 4] = 3
|
count (fun x -> x mod 2 = 0) [2; 6; 9; 4] = 3
|
||||||
*)
|
*)
|
||||||
|
|
||||||
|
let counts p l =
|
||||||
|
fold_left (fun (ok, ko) x ->
|
||||||
|
if p x then (ok + 1, ko)
|
||||||
|
else (ok, ko + 1)
|
||||||
|
) (0, 0) l
|
||||||
|
|
||||||
|
(*$T
|
||||||
|
counts (fun x -> x mod 2 = 0) [] = (0, 0)
|
||||||
|
counts (fun x -> x mod 2 = 0) [0; 0; 2; 4] = (4, 0)
|
||||||
|
counts (fun x -> x mod 2 = 0) [1; 3; 5; 7] = (0, 4)
|
||||||
|
counts (fun x -> x mod 2 = 0) [2; 6; 9; 4] = (3, 1)
|
||||||
|
*)
|
||||||
|
|
||||||
let product f l1 l2 =
|
let product f l1 l2 =
|
||||||
flat_map (fun x -> map (fun y -> f x y) l2) l1
|
flat_map (fun x -> map (fun y -> f x y) l2) l1
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -86,9 +86,14 @@ val fold_flat_map : ('acc -> 'a -> 'acc * 'b list) -> 'acc -> 'a list -> 'acc *
|
||||||
@since 0.14 *)
|
@since 0.14 *)
|
||||||
|
|
||||||
val count : ('a -> bool) -> 'a list -> int
|
val count : ('a -> bool) -> 'a list -> int
|
||||||
(** [count f l] counts how much elements of [l] comply with the function [f].
|
(** [count p l] counts how many elements of [l] satisfy predicate [p].
|
||||||
@since 1.5 *)
|
@since 1.5 *)
|
||||||
|
|
||||||
|
val counts : ('a -> bool) -> 'a list -> int * int
|
||||||
|
(** [let ok_count, ko_count = counts p l in ...]
|
||||||
|
counts how many elements of [l] satisfy (resp. violate) predicate [p].
|
||||||
|
@since NEXT_RELEASE *)
|
||||||
|
|
||||||
val init : int -> (int -> 'a) -> 'a t
|
val init : int -> (int -> 'a) -> 'a t
|
||||||
(** [init len f] is [f 0; f 1; ...; f (len-1)].
|
(** [init len f] is [f 0; f 1; ...; f (len-1)].
|
||||||
@raise Invalid_argument if len < 0.
|
@raise Invalid_argument if len < 0.
|
||||||
|
|
|
||||||
|
|
@ -86,6 +86,9 @@ val fold_flat_map : f:('acc -> 'a -> 'acc * 'b list) -> init:'acc -> 'a list ->
|
||||||
val count : f:('a -> bool) -> 'a list -> int
|
val count : f:('a -> bool) -> 'a list -> int
|
||||||
(** @since 2.2 *)
|
(** @since 2.2 *)
|
||||||
|
|
||||||
|
val counts : f:('a -> bool) -> 'a list -> int * int
|
||||||
|
(** @since NEXT_RELEASE *)
|
||||||
|
|
||||||
val init : int -> f:(int -> 'a) -> 'a t
|
val init : int -> f:(int -> 'a) -> 'a t
|
||||||
(** [init len ~f] is [f 0; f 1; ...; f (len-1)].
|
(** [init len ~f] is [f 0; f 1; ...; f (len-1)].
|
||||||
@raise Invalid_argument if len < 0.
|
@raise Invalid_argument if len < 0.
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue