diff options
| author | filliatr | 1999-11-19 17:01:43 +0000 |
|---|---|---|
| committer | filliatr | 1999-11-19 17:01:43 +0000 |
| commit | 9bdaa212057cdd41ba416cc9f05167e91eeed4b3 (patch) | |
| tree | 328de03d16931d5abfd9ac4c0254b93cb0e5dcf9 /lib | |
| parent | b0382a9829f08282351244839526bd2ffbe6283f (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.ml | 25 | ||||
| -rw-r--r-- | lib/util.mli | 4 |
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 |
