]> matita.cs.unibo.it Git - helm.git/commitdiff
added filter_map
authorStefano Zacchiroli <zack@upsilon.cc>
Tue, 4 Oct 2005 09:35:39 +0000 (09:35 +0000)
committerStefano Zacchiroli <zack@upsilon.cc>
Tue, 4 Oct 2005 09:35:39 +0000 (09:35 +0000)
helm/ocaml/extlib/hExtlib.ml
helm/ocaml/extlib/hExtlib.mli

index 06ac37b13c19197dfa5245f4afd16af5dec27acc..d3ae69402313132ce3457193296b60ca9b32e5d4 100644 (file)
@@ -96,6 +96,14 @@ let rec list_uniq = function
   | h1::h2::tl when h1 = h2 -> list_uniq (h2 :: tl) 
   | h1::tl (* when h1 <> h2 *) -> h1 :: list_uniq tl
 
+let rec filter_map f =
+  function
+  | [] -> []
+  | hd :: tl ->
+      (match f hd with
+      | None -> filter_map f tl
+      | Some v -> v :: filter_map f tl)
+
 (** {2 File predicates} *)
 
 let is_dir fname =
index cd4cc276ebc8a5084dbdde08c7deae2a6f0e471e..2565f7861f12af7ac93f98f182eaa22b0fed9242 100644 (file)
@@ -52,6 +52,7 @@ 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 *)
 
 (** {2 Debugging & Profiling} *)