aux 0 l
;;
+let list_mapi_acc f a l =
+ let rec aux k a res = function
+ | [] -> a, List.rev res
+ | h::tl -> let a,h = f h k a in aux (k+1) a (h::res) tl
+ in
+ aux 0 a [] l
+;;
+
let list_index p =
let rec aux n =
function
| None -> filter_map f tl
| Some v -> v :: filter_map f tl)
+let filter_map_acc f acc l =
+ let acc, res =
+ List.fold_left
+ (fun (acc, res) t ->
+ match f acc t with
+ | None -> acc, res
+ | Some (acc, x) -> acc, x::res)
+ (acc,[]) l
+ in
+ acc, List.rev res
+;;
+
+let filter_map_monad f acc l =
+ let acc, res =
+ List.fold_left
+ (fun (acc, res) t ->
+ match f acc t with
+ | acc, None -> acc, res
+ | acc, Some x -> acc, x::res)
+ (acc,[]) l
+ in
+ acc, List.rev res
+;;
+
let list_rev_map_filter f l =
let rec aux a = function
| [] -> a