diff options
| author | herbelin | 2004-02-13 17:53:01 +0000 |
|---|---|---|
| committer | herbelin | 2004-02-13 17:53:01 +0000 |
| commit | 68deb3abb9557aae4596c482cbf0aa0113dbc154 (patch) | |
| tree | 1fb0692eb220a5ce8456179befef40a46aa480f7 /lib/util.ml | |
| parent | 42c93f15c135af0e5c822d2a60fbb92002acb2ca (diff) | |
Ajout array_map_left and co
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@5342 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'lib/util.ml')
| -rw-r--r-- | lib/util.ml | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/util.ml b/lib/util.ml index 56d6717e38..89e8a7b84a 100644 --- a/lib/util.ml +++ b/lib/util.ml @@ -551,6 +551,28 @@ let array_map3 f v1 v2 v3 = res end +let array_map_left f a = (* Ocaml does not guarantee Array.map is LR *) + let l = Array.length a in (* (even if so), then we rewrite it *) + if l = 0 then [||] else begin + let r = Array.create l (f a.(0)) in + for i = 1 to l - 1 do + r.(i) <- f a.(i) + done; + r + end + +let array_map_left_pair f a g b = + let l = Array.length a in + if l = 0 then [||],[||] else begin + let r = Array.create l (f a.(0)) in + let s = Array.create l (g b.(0)) in + for i = 1 to l - 1 do + r.(i) <- f a.(i); + s.(i) <- g b.(i) + done; + r, s + end + (* Matrices *) let matrix_transpose mat = |
