From dd5a5cfcb19e3ef5059dbb2d777a6f147dd556a6 Mon Sep 17 00:00:00 2001 From: Enrico Tassi Date: Thu, 15 May 2008 15:47:57 +0000 Subject: [PATCH] New function list_forall_default3. 3 euros to the first one that reuses this function (not artificially) --- helm/software/components/extlib/hExtlib.ml | 9 +++++++++ helm/software/components/extlib/hExtlib.mli | 4 ++++ 2 files changed, 13 insertions(+) diff --git a/helm/software/components/extlib/hExtlib.ml b/helm/software/components/extlib/hExtlib.ml index 2f388c0b5..0d19524dc 100644 --- a/helm/software/components/extlib/hExtlib.ml +++ b/helm/software/components/extlib/hExtlib.ml @@ -155,6 +155,15 @@ let rec list_iter_default2 f l1 def l2 = | a::ta, [] -> f a def; list_iter_default2 f ta def [] ;; +let rec list_forall_default3 f l1 l2 def l3 = + match l1,l2,l3 with + | [], [], _ -> true + | [], _, _ + | _, [], _ -> raise (Invalid_argument "list_forall_default3") + | a::ta, b::tb, c::tc -> f a b c && list_forall_default3 f ta tb def tc + | a::ta, b::tb, [] -> f a b def && list_forall_default3 f ta tb def [] +;; + let sharing_map f l = let unchanged = ref true in let rec aux b = function diff --git a/helm/software/components/extlib/hExtlib.mli b/helm/software/components/extlib/hExtlib.mli index 22139c291..1e2d8e047 100644 --- a/helm/software/components/extlib/hExtlib.mli +++ b/helm/software/components/extlib/hExtlib.mli @@ -96,6 +96,10 @@ val sharing_map: ('a -> 'a) -> 'a list -> 'a list The second one can be shorter and is padded with a default value. This function cannot fail. *) val list_iter_default2: ('a -> 'b -> unit) -> 'a list -> 'b -> 'b list -> unit +(* Checks a predicate in parallel on three lists, the first two having the same + length (otherwise it raises Invalid_argument). It stops when the first two + lists are empty. The third one can be shorter and is padded with a default value. *) +val list_forall_default3: ('a -> 'b -> 'c -> bool) -> 'a list -> 'b list -> 'c -> 'c list -> bool (** split_nth n l -- 2.39.2