]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/components/extlib/hExtlib.ml
Branched paramodulation for CNF (Horn clauses)
[helm.git] / helm / software / components / extlib / hExtlib.ml
index 4a228b232736e916f4960048dfd9d15f0146e8eb..7ae392c5f3534b2dfaa695d6d3a663159fa33dfe 100644 (file)
@@ -27,9 +27,9 @@
 
 (** PROFILING *)
 
-let profiling_enabled = ref false ;; (* ComponentsConf.profiling *)
+let profiling_enabled = ref true ;; (* ComponentsConf.profiling *)
 
-let something_profiled = ref false
+let something_profiled = ref false ;;
 
 let _ = 
   if !something_profiled then
@@ -148,6 +148,14 @@ let list_mapi f l =
      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
@@ -217,6 +225,30 @@ let rec filter_map f =
       | 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
@@ -267,11 +299,11 @@ let rec list_findopt f l =
   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