List Haskell中N个列表元素的所有组合
为了合并2个列表,可以使用以下代码List Haskell中N个列表元素的所有组合,list,haskell,functional-programming,list-comprehension,combinatorics,List,Haskell,Functional Programming,List Comprehension,Combinatorics,为了合并2个列表,可以使用以下代码 [(x,y)| x是否: > sequence [[1,2,3] , [4,5,6]] [[1,4],[1,5],[1,6],[2,4],[2,5],[2,6],[3,4],[3,5],[3,6]] > sequence [[1,2,3] , [4,5,6] , [7]] [[1,4,7],[1,5,7],[1,6,7],[2,4,7],[2,5,7],[2,6,7],[3,4,7],[3,5,7],[3,6,7]] Haskell中没有任意长
[(x,y)| x是否:
> sequence [[1,2,3] , [4,5,6]]
[[1,4],[1,5],[1,6],[2,4],[2,5],[2,6],[3,4],[3,5],[3,6]]
> sequence [[1,2,3] , [4,5,6] , [7]]
[[1,4,7],[1,5,7],[1,6,7],[2,4,7],[2,5,7],[2,6,7],[3,4,7],[3,5,7],[3,6,7]]
Haskell中没有任意长度的元组,因此必须使用列表来收集结果“元组”
实际上在这里已经足够了,但是列表的应用函子和单子是相同的,所以这并不重要
如果任何列表可能是无限的,如果需要更公平的枚举,则必须使用一些对角化方案(参见例如,等等)
为了自己实现它,必须使用递归
ncart :: [[a]] -> [[a]]
ncart (xs:t) = [ x:r | x <- xs, r <- ncart t]
ncart [] = [[]]
ncart::[[a]]->[[a]]
ncart(xs:t)=[x:r | x您必须使用[[Int]]
而不是[(Int,Int)]
,Ithink@user我不太确定我是否理解你的意思,抱歉,我是Haskell的新手如果你想将其推广到N个列表,你将不能使用元组,因为你不能只向元组中添加一个元素,所以你需要列表。你也许可以创建你自己的元组结构,你可以轻松地反对和反对。(顺便说一句,这是笛卡尔积)