diff options
| author | herbelin | 2000-06-29 18:21:06 +0000 |
|---|---|---|
| committer | herbelin | 2000-06-29 18:21:06 +0000 |
| commit | ac7f047a00909fa1bdfbd3d28cb06060b1df42f2 (patch) | |
| tree | f8f365ac6509730067ccf47d810c8a6482107186 /lib | |
| parent | 3020db6f39d08648f1f8deaf9995659a0eea70db (diff) | |
Ajout list_fold_right_and_left
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@535 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/util.ml | 18 | ||||
| -rw-r--r-- | lib/util.mli | 1 |
2 files changed, 19 insertions, 0 deletions
diff --git a/lib/util.ml b/lib/util.ml index e17e586c20..c733ed3335 100644 --- a/lib/util.ml +++ b/lib/util.ml @@ -141,6 +141,24 @@ let list_fold_left_i f = in it_list_f +(* [list_fold_right_and_left f [a1;...;an] hd = + f (f (... (f (f hd + an + [an-1;...;a1]) + an-1 + [an-2;...;a1]) + ...) + a2 + [a1]) + a1 + []] *) + +let rec list_fold_right_and_left f l hd = + let rec aux tl = function + | [] -> hd + | a::l -> let hd = aux (a::tl) l in f hd a tl + in aux [] l + let list_iter_i f l = list_fold_left_i (fun i _ x -> f i x) 0 () l let list_for_all_i p = diff --git a/lib/util.mli b/lib/util.mli index 35d181098d..22953788af 100644 --- a/lib/util.mli +++ b/lib/util.mli @@ -58,6 +58,7 @@ val list_map2_i : val list_index : 'a -> 'a list -> int val list_iter_i : (int -> 'a -> unit) -> 'a list -> unit val list_fold_left_i : (int -> 'a -> 'b -> 'a) -> int -> 'a -> 'b list -> 'a +val list_fold_left_right : ('a -> 'b -> 'b list -> 'a) -> 'b list -> 'a -> 'a val list_for_all_i : (int -> 'a -> bool) -> int -> 'a list -> bool val list_except : 'a -> 'a list -> 'a list val list_for_all2eq : ('a -> 'b -> bool) -> 'a list -> 'b list -> bool |
