Nic*_*ner 4 java ocaml permutation
我有两套,由Set.Make(t)返回.我想生成两者中值的所有可能组合.我怎样才能做到这一点?
这可以生成一些对,但不是全部:
List.combine (IntSet.elements odp) (IntSet.elements ftw)
Run Code Online (Sandbox Code Playgroud)
这将在Java中实现:
for (int i : ktr) {
for (int m : mnx) {
System.out.println(i + ", " + m);
}
}
Run Code Online (Sandbox Code Playgroud)
将@David Crawshaw的解决方案(尾递归)与@ newacct(完全通用)相结合:
let cartesian_product xs ys =
List.fold_left (fun acc x ->
List.fold_left (fun acc y ->
(x,y) :: acc)
acc ys)
[] xs
let product =
cartesian_product (IntSet.elements odb) (IntSet.elements ftw)
Run Code Online (Sandbox Code Playgroud)
这将颠倒自然顺序.它可以通过应用List.rev结果(List.rev也是尾递归)重新获得.
如果xs和ys是两个列表,则它们的笛卡尔乘积(返回对列表)可以计算如下:
List.concat (List.map (fun x -> List.map (fun y -> (x, y))
ys)
xs)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,你xs和ys现在IntSet.elements odp和IntSet.elements ftw