aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorfilliatr1999-11-19 17:01:43 +0000
committerfilliatr1999-11-19 17:01:43 +0000
commit9bdaa212057cdd41ba416cc9f05167e91eeed4b3 (patch)
tree328de03d16931d5abfd9ac4c0254b93cb0e5dcf9 /lib
parentb0382a9829f08282351244839526bd2ffbe6283f (diff)
module Pattern, Wcclausenv (interface) et Tacticals
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@126 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'lib')
-rw-r--r--lib/util.ml25
-rw-r--r--lib/util.mli4
2 files changed, 29 insertions, 0 deletions
diff --git a/lib/util.ml b/lib/util.ml
index bb50238860..f3bc44ebf4 100644
--- a/lib/util.ml
+++ b/lib/util.ml
@@ -159,6 +159,29 @@ let list_subset l1 l2 =
in
look l1
+let list_splitby p =
+ let rec splitby_loop x y =
+ match y with
+ | [] -> ([],[])
+ | (a::l) -> if (p a) then (x,y) else (splitby_loop (x@[a]) l)
+ in
+ splitby_loop []
+
+let list_firstn n l =
+ let rec aux acc = function
+ | (0, l) -> List.rev acc
+ | (n, (h::t)) -> aux (h::acc) (pred n, t)
+ | _ -> failwith "firstn"
+ in
+ aux [] (n,l)
+
+let list_lastn n l =
+ let len = List.length l in
+ let rec aux m l =
+ if m = n then l else aux (m - 1) (List.tl l)
+ in
+ if len < n then failwith "lastn" else aux len l
+
(* Arrays *)
let array_exists f v =
@@ -297,6 +320,8 @@ let intmap_to_list m = Intmap.fold (fun n v l -> (n,v)::l) m []
let intmap_inv m b = Intmap.fold (fun n v l -> if v = b then n::l else l) m []
+let in_some x = Some x
+
let out_some = function
| Some x -> x
| None -> failwith "out_some"
diff --git a/lib/util.mli b/lib/util.mli
index 3975cdfc6e..4f992ffd4e 100644
--- a/lib/util.mli
+++ b/lib/util.mli
@@ -47,6 +47,9 @@ val list_try_find_i : (int -> 'a -> 'b) -> int -> 'a list -> 'b
val list_uniquize : 'a list -> 'a list
val list_distinct : 'a list -> bool
val list_subset : 'a list -> 'a list -> bool
+val list_splitby : ('a -> bool) -> 'a list -> 'a list * 'a list
+val list_firstn : int -> 'a list -> 'a list
+val list_lastn : int -> 'a list -> 'a list
(*s Arrays. *)
@@ -89,6 +92,7 @@ val intmap_in_dom : int -> 'a Intmap.t -> bool
val intmap_to_list : 'a Intmap.t -> (int * 'a) list
val intmap_inv : 'a Intmap.t -> 'a -> int list
+val in_some : 'a -> 'a option
val out_some : 'a option -> 'a
val option_app : ('a -> 'b) -> 'a option -> 'b option