| 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 list_rev_map_filter f l =
let rec aux a = function
| [] -> a
in
aux 0 l
-let split_nth msg n l =
+let split_nth n l =
let rec aux acc n l =
match n, l with
| 0, _ -> List.rev acc, l
- | n, [] -> raise (Failure ("HExtlib.split_nth: " ^ msg))
+ | n, [] -> raise (Failure "HExtlib.split_nth")
| n, hd :: tl -> aux (hd :: acc) (n - 1) tl in
aux [] n l