Ocaml:如何获取两个列表的每个排列组合的列表?

时间:2011-10-21 22:04:24

标签: list ocaml permutation combinations

我有两个列表,例如:

let x = [1;2];;
let y = [true;false];;

我想基本上有一个带有

的(int * boolean)列表
[[(1,true);(2;false)];[(1,true);(2,true);];[(1,false);(2,true);];[(1,false);(2,false);]]

任何人都知道如何做到这一点?

3 个答案:

答案 0 :(得分:2)

我认为没有人回答,因为这有点像家庭作业问题。我首先考虑所需结果中所有对的第二个元素。我看到一个非常规则的结构:TF,TT,FT,FF。按顺序(比方说)FF,FT,TF,TT会有点更多。无论如何,一旦你可以列出看起来像这样的列表,使用List模块中的函数很容易将列表与其他列表配对。

(如果你展示了一些你尝试过的东西,你可能会得到更多的答案,并解释为什么它们不起作用。)

此致

答案 1 :(得分:2)

关于操作究竟是什么,问题没有明确说明。那么[(1,true);(1,false)]呢?似乎操作不是对称的 - x中的内容总是以该顺序出现,而y中的内容可以重复并以任何顺序出现。如果你把它分解成两个任务,也许会有所帮助:

  1. 重复第二个列表的每个排列
  2. 使用第一个列表
  3. 压缩每个结果

答案 2 :(得分:-1)

您可以咨询List module's document

否则,只需输入

即可
$ cd `ocamlc -where`
$ less list.mli

您可以找到您想要做的功能。