Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List Haskell中N个列表元素的所有组合_List_Haskell_Functional Programming_List Comprehension_Combinatorics - Fatal编程技术网

List Haskell中N个列表元素的所有组合

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中没有任意长

为了合并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中没有任意长度的元组,因此必须使用列表来收集结果“元组”

实际上在这里已经足够了,但是列表的应用函子和单子是相同的,所以这并不重要

如果任何列表可能是无限的,如果需要更公平的枚举,则必须使用一些对角化方案(参见例如,等等)

为了自己实现它,必须使用递归

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个列表,你将不能使用元组,因为你不能只向元组中添加一个元素,所以你需要列表。你也许可以创建你自己的元组结构,你可以轻松地反对和反对。(顺便说一句,这是笛卡尔积)