【发布时间】:2016-05-13 01:45:19
【问题描述】:
我想生成一个 6 元素列表 [x1,x2,x3,x4,x5,x6] 的所有可能组合,其中每个 xi 是 0 到 20 之间的数字。
我想生成此类列表的所有可能组合,对每个列表应用一个函数(将列表作为输入并输出一个神奇的 Int),然后将结果输出到一个元组列表。所以元组列表看起来像
[([x11,x21,x31,x41,x51,x61],Int1), ([x12,x22,x32,x42,x52,x62],Int2), ...]
我手动尝试了这一点,但很快意识到组合太多,几乎不可能手动完成。
组合如 [0,0,0,0,0,0], [1,7,0,10,11,6], [7,7,7,7,6,6], [ 20,20,20,20,20,20] 等等。
我知道如何生成列表的所有组合并将它们放入列表列表中(因为我之前问过这个)
foo [] = [[]]
foo (x:xs) = foo xs ++ map (x:) (foo xs)
这次我想要实现的是不同的,因为我不是要在特定列表中生成不同的组合,而是要生成所有 6 个元素列表。
【问题讨论】:
-
只有64000000(20^6)个,怎么“太多”了?您可能应该对实际问题使用更聪明的方法。这些神奇的整数是什么,你用它们做什么,你为什么需要这么多?
-
我想你会在 List Comprehensions 上的 Haskell wiki 页面上找到这些示例很有帮助。
-
@Bergi 如果你真的阅读了周围的上下文,手工处理太多了。
-
@immibis,这可能是讽刺。 20⁶ 相当多,在许多情况下,您实际上并不需要它。不过,如果不知道实际问题,就不可能说出来。
标签: list haskell combinations