]> matita.cs.unibo.it Git - helm.git/commitdiff
added list_concat
authorStefano Zacchiroli <zack@upsilon.cc>
Tue, 11 Oct 2005 08:24:33 +0000 (08:24 +0000)
committerStefano Zacchiroli <zack@upsilon.cc>
Tue, 11 Oct 2005 08:24:33 +0000 (08:24 +0000)
helm/ocaml/extlib/hExtlib.ml
helm/ocaml/extlib/hExtlib.mli

index 31cf86a75d4007d6a570fbee91418cd22330f8aa..ceb9c8d8bc1ca21fd3a361db1d951300136a34de 100644 (file)
@@ -104,6 +104,15 @@ let rec filter_map f =
       | None -> filter_map f tl
       | Some v -> v :: filter_map f tl)
 
+let list_concat ?(sep = []) =
+  let rec aux acc =
+    function
+    | [] -> []
+    | [ last ] -> List.flatten (List.rev (last :: acc))
+    | hd :: tl -> aux ([sep; hd] @ acc) tl
+  in
+  aux []
+
 (** {2 File predicates} *)
 
 let is_dir fname =
index 46ea0b9cebfb3f7ddbe3533935adf2b58911ddb0..e40920350710fa2b9cca7a89e6573847babaf376 100644 (file)
@@ -54,8 +54,9 @@ val trim_blanks: string -> string (** strip heading and trailing blanks *)
 
 (** {2 List processing} *)
 
-val list_uniq: 'a list -> 'a list (* uniq unix filter on lists *)
-val filter_map: ('a -> 'b option) -> 'a list -> 'b list (* filter + map *)
+val list_uniq: 'a list -> 'a list (** uniq unix filter on lists *)
+val filter_map: ('a -> 'b option) -> 'a list -> 'b list (** filter + map *)
+val list_concat: ?sep:'a list -> 'a list list -> 'a list (**String.concat-like*)
 
 (** {2 Debugging & Profiling} *)