列出所有可能组合的列表

时间:2016-05-10 22:51:22

标签: list haskell

首先,我不记得这个重复列表的名称。

我有一个清单:

myList = [0, 1, 2]

我想重复列表清单:

[[0,1,2],[1,2,0],...]

我知道我可以做permutations myList 但它不会涵盖重复的部分,例如[[0,0,0],[1,1,1],[1,1,0],...]

所以,我的问题是这种列表的名称是什么。 它不是permutations,绝对不是combinations

在逻辑上,我相信它是truth table

在haskell中是否有内置函数?

2 个答案:

答案 0 :(得分:4)

GHCi, version 7.10.2: http://www.haskell.org/ghc/  :? for help
Prelude> :m +Control.Monad
Prelude Control.Monad> replicateM 3 [0,1,2]
[[0,0,0],[0,0,1],[0,0,2],[0,1,0],[0,1,1],[0,1,2],[0,2,0],[0,2,1],[0,2,2],[1,0,0],[1,0,1],[1,0,2],[1,1,0],[1,1,1],[1,1,2],[1,2,0],[1,2,1],[1,2,2],[2,0,0],[2,0,1],[2,0,2],[2,1,0],[2,1,1],[2,1,2],[2,2,0],[2,2,1],[2,2,2]]

请注意,基本上,允许值列表的长度决不需要与每个选项列表的长度相关联。

答案 1 :(得分:2)

列表理解

x = [0,1,2]
[[a,b,c] | a<-x, b<-x, c<-x]                           

[[0,0,0],[0,0,1],[0,0,2],[0,1,0],[0,1,1],[0,1,2],[0,2,0],[0,2,1],[0,2,2],
 [1,0,0],[1,0,1],[1,0,2],[1,1,0],[1,1,1],[1,1,2],[1,2,0],[1,2,1],[1,2,2],
 [2,0,0],[2,0,1],[2,0,2],[2,1,0],[2,1,1],[2,1,2],[2,2,0],[2,2,1],[2,2,2]]