X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fcomponents%2Fextlib%2FhExtlib.ml;h=d4572789ad55f39795d000fd09192e839cfee02f;hb=7a8f91f8aa2d6ba24bf6b3093866f759ee16e690;hp=3cc6c9bb5c0bc876f74d35de8868f3231a56c14e;hpb=ee2b6c8f1493990ee86faba0739389d9f270a69b;p=helm.git diff --git a/helm/software/components/extlib/hExtlib.ml b/helm/software/components/extlib/hExtlib.ml index 3cc6c9bb5..d4572789a 100644 --- a/helm/software/components/extlib/hExtlib.ml +++ b/helm/software/components/extlib/hExtlib.ml @@ -153,6 +153,17 @@ let rec filter_map f = | None -> filter_map f tl | Some v -> v :: filter_map f tl) +let list_rev_map_filter f l = + let rec aux a = function + | [] -> a + | hd :: tl -> + begin match f hd with + | None -> aux a tl + | Some b -> aux (b :: a) tl + end + in + aux [] l + let list_concat ?(sep = []) = let rec aux acc = function @@ -180,6 +191,11 @@ let split_nth n l = | n, hd :: tl -> aux (hd :: acc) (n - 1) tl in aux [] n l +let list_last l = + let l = List.rev l in + try List.hd l with exn -> raise (Failure "HExtlib.list_last") +;; + (** {2 File predicates} *) let is_dir fname =