【发布时间】:2022-01-16 08:50:25
【问题描述】:
正如问题所述,我有一个多维列表,我想计算一个列表,其中包含这些列表的所有可能组合。 我只有一个用于一维列表的函数,如下所示:
combinations :: [a] -> [[a]]
combinations xs = [ [x,y] | x <- xs, y <- xs]
【问题讨论】:
-
您的解决方案允许重复:您可以为列表
[1,2,3]生成[2,2]。这是预期的行为,还是“错误”?如果没有重复,看起来你想生成所有可能的排列。 -
是的,需要这种行为。这同样适用于列表中的列表组合。
-
但是
combinations [1,2,3]的输出是什么?[1,1,1]、[1,1,2]等等?我们什么时候停止“挑选”元素?例如,我不太清楚combinations [1,2,3]的预期输出应该是什么。 -
组合 [1,2,3] 的输出为:[[1,1],[1,2],[1,3],[2,1],[2,2 ],[2,3],[3,1],[3,2],[3,3]]。但是我不能对多维列表使用相同的解决方案。多维列表所需的输出如下所示:combinationsM [[1,2],[3,4]] = [[[1,2],[3,4]],[[3,4], [1,2]]]
-
如果你使用列表,比如
[[1], [2,3]],它将作为组合返回[[[1],[1]], [[1], [2,3]], [[2,3], [1]], [[2,3], [2,3]]]
标签: haskell functional-programming