]> matita.cs.unibo.it Git - helm.git/commitdiff
added split_nth
authorStefano Zacchiroli <zack@upsilon.cc>
Tue, 18 Jul 2006 14:21:56 +0000 (14:21 +0000)
committerStefano Zacchiroli <zack@upsilon.cc>
Tue, 18 Jul 2006 14:21:56 +0000 (14:21 +0000)
components/extlib/hExtlib.ml
components/extlib/hExtlib.mli

index 32f33bd2be735bbb3d5df18d4d63cc0c62e863e9..3cc6c9bb5c0bc876f74d35de8868f3231a56c14e 100644 (file)
@@ -172,6 +172,14 @@ let rec list_findopt f l =
   in
   aux 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")
+    | n, hd :: tl -> aux (hd :: acc) (n - 1) tl in
+  aux [] n l
+
 (** {2 File predicates} *)
 
 let is_dir fname =
index a38b09334c7d2cb677c4e673d911f73441015443..8de41f6837df4a067bab010438a8731a81d35b88 100644 (file)
@@ -40,7 +40,6 @@ val safe_rmdir: string -> unit (** removes a dir if it exists and is empty *)
 val is_dir_empty: string -> bool (** checks if the dir is empty *)
 val rmdir_descend: string -> unit (** rmdir -p *)
 
-
   (** find all _files_ whose name matches test under a filesystem root.
    * Test is passed the filename path relative to the given filesystem root *)
 val find: ?test:(string -> bool) -> string -> string list 
@@ -80,6 +79,12 @@ val list_concat: ?sep:'a list -> 'a list list -> 'a list (**String.concat-like*)
 val list_findopt: ('a -> 'b option) -> 'a list -> 'b option
 val flatten_map: ('a -> 'b list) -> 'a list -> 'b list
 
+  (** split_nth n l
+   * @returns two list, the first contains at least n elements, the second the
+   * remaining one
+   * @raise Failure when List.length l < n *)
+val split_nth: int -> 'a list -> 'a list * 'a list
+
 (** {2 Debugging & Profiling} *)
 
 type profiler = { profile : 'a 'b. ('a -> 'b) -> 'a -> 'b }