aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/util.ml6
-rw-r--r--lib/util.mli4
2 files changed, 10 insertions, 0 deletions
diff --git a/lib/util.ml b/lib/util.ml
index 363e13b1a6..963ed51930 100644
--- a/lib/util.ml
+++ b/lib/util.ml
@@ -371,6 +371,12 @@ let array_map3 f v1 v2 v3 =
res
end
+(* Matrices *)
+
+let matrix_transpose mat =
+ List.fold_right (List.map2 (fun p c -> p::c)) mat
+ (if mat = [] then [] else List.map (fun _ -> []) (List.hd mat))
+
(* Functions *)
let compose f g x = f (g x)
diff --git a/lib/util.mli b/lib/util.mli
index 847842865d..9378011e27 100644
--- a/lib/util.mli
+++ b/lib/util.mli
@@ -101,6 +101,10 @@ val array_map2_i : (int -> 'a -> 'b -> 'c) -> 'a array -> 'b array -> 'c array
val array_map3 :
('a -> 'b -> 'c -> 'd) -> 'a array -> 'b array -> 'c array -> 'd array
+(*s Matrices *)
+
+val matrix_transpose : 'a list list -> 'a list list
+
(*s Functions. *)
val compose : ('a -> 'b) -> ('c -> 'a) -> 'c -> 'b