diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/util.ml | 7 | ||||
| -rw-r--r-- | lib/util.mli | 2 |
2 files changed, 9 insertions, 0 deletions
diff --git a/lib/util.ml b/lib/util.ml index 57fea38084..a7d2099f1f 100644 --- a/lib/util.ml +++ b/lib/util.ml @@ -687,6 +687,13 @@ let list_map_i f = in map_i_rec +let list_filter_i p = + let rec filter_i_rec i = function + | [] -> [] + | x::l -> let l' = filter_i_rec (succ i) l in if p i x then x::l' else l' + in + filter_i_rec 0 + let rec list_sep_last = function | [] -> failwith "sep_last" | hd::[] -> (hd,[]) diff --git a/lib/util.mli b/lib/util.mli index 1be7f807a2..34e91215ad 100644 --- a/lib/util.mli +++ b/lib/util.mli @@ -124,6 +124,8 @@ val list_map3 : ('a -> 'b -> 'c -> 'd) -> 'a list -> 'b list -> 'c list -> 'd list val list_map4 : ('a -> 'b -> 'c -> 'd -> 'e) -> 'a list -> 'b list -> 'c list -> 'd list -> 'e list +val list_filter_i : + (int -> 'a -> bool) -> 'a list -> 'a list (* [list_index] returns the 1st index of an element in a list (counting from 1) *) val list_index : 'a -> 'a list -> int (* [list_unique_index x l] returns [Not_found] if [x] doesn't occur exactly once *) |
