aboutsummaryrefslogtreecommitdiff
path: root/lib/util.ml
diff options
context:
space:
mode:
Diffstat (limited to 'lib/util.ml')
-rw-r--r--lib/util.ml8
1 files changed, 8 insertions, 0 deletions
diff --git a/lib/util.ml b/lib/util.ml
index a1c011ce1b..590d649931 100644
--- a/lib/util.ml
+++ b/lib/util.ml
@@ -445,6 +445,14 @@ let list_fold_map' f l e =
let list_map_assoc f = List.map (fun (x,a) -> (x,f a))
+(* list_combinations [[a;b];[c;d]] gives [[a;c];[a;d];[b;c];[b;d]] *)
+
+let rec list_combinations = function
+ | [] -> [[]]
+ | l::ll ->
+ let res = list_combinations ll in
+ list_map_append (fun x -> List.map (fun l -> x::l) res) l
+
(* Arrays *)
let array_exists f v =