diff options
-rw-r--r-- | lib/util.ml | 8 | ||||
-rw-r--r-- | lib/util.mli | 1 |
2 files changed, 9 insertions, 0 deletions
diff --git a/lib/util.ml b/lib/util.ml index e9f87acb5..688d41584 100644 --- a/lib/util.ml +++ b/lib/util.ml @@ -695,6 +695,14 @@ let rec list_map_filter f = function let l' = list_map_filter f l in match f x with None -> l' | Some y -> y::l' +let list_map_filter_i f = + let rec aux i = function + | [] -> [] + | x::l -> + let l' = aux (succ i) l in + match f i x with None -> l' | Some y -> y::l' + in aux 0 + let list_subset l1 l2 = let t2 = Hashtbl.create 151 in List.iter (fun x -> Hashtbl.add t2 x ()) l2; diff --git a/lib/util.mli b/lib/util.mli index 7b8f9d31d..e24df1a31 100644 --- a/lib/util.mli +++ b/lib/util.mli @@ -133,6 +133,7 @@ val list_distinct : 'a list -> bool val list_duplicates : 'a list -> 'a list val list_filter2 : ('a -> 'b -> bool) -> 'a list * 'b list -> 'a list * 'b list val list_map_filter : ('a -> 'b option) -> 'a list -> 'b list +val list_map_filter_i : (int -> 'a -> 'b option) -> 'a list -> 'b list (** [list_smartmap f [a1...an] = List.map f [a1...an]] but if for all i [ f ai == ai], then [list_smartmap f l==l] *) |