Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.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
Haskell 两个列表的交替排列_Haskell - Fatal编程技术网

Haskell 两个列表的交替排列

Haskell 两个列表的交替排列,haskell,Haskell,我试图得到两个列表的替代排列,没有固定长度,例如: x = ["a","b","c"] y = [1,2,3] 应返回: [(a,1),(b,2),(c,3)] , [(a,2),(b,3),(c,1)], [(a,3),(b,1),(c,2)] 通过对列表的理解,我能够得出以下结论: [(x,y) | x<-x, y<-y ] [("a",1),("a",2),("a",3),("b",1),("b",2),("b",3),("c",1),("c",2),("c",3)]

我试图得到两个列表的替代排列,没有固定长度,例如:

x = ["a","b","c"]
y = [1,2,3]
应返回:

[(a,1),(b,2),(c,3)] , [(a,2),(b,3),(c,1)], [(a,3),(b,1),(c,2)]
通过对列表的理解,我能够得出以下结论:

[(x,y) | x<-x, y<-y ]

[("a",1),("a",2),("a",3),("b",1),("b",2),("b",3),("c",1),("c",2),("c",3)]

[(x,y)| x您只需排列两个列表中的一个,然后按原始顺序将每个排列与另一个列表配对:

import Data.List (permutations)

bijections :: [a] -> [b] -> [[(a, b)]]
bijections xs ys = map (zip xs) (permutations ys)

它的作用是生成所有的
ys
(例如,
[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]
)然后,对于每一个列表,它都会按照原始顺序将它们与
xs
配对。

您只需排列两个列表中的一个,然后按照原始顺序将每个排列与另一个列表配对:

import Data.List (permutations)

bijections :: [a] -> [b] -> [[(a, b)]]
bijections xs ys = map (zip xs) (permutations ys)

它的作用是生成所有的
ys
(例如,
[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]
)然后,对于每一个元素,它都会按原始顺序将它们与
xs
配对。

使用和
zip
应该可以让你达到目的。哦,有什么原因你只考虑[1,2,3]的一半排列吗?(例如[3,2,1]不存在)对我来说,重要的是每个字母都与每个数字匹配,列表中的顺序并不重要,例如[(a,1),(b,2),(c,3)]=[(c,3),(b,2),(a,1)]啊,是的,但你似乎错过了匹配的
[(a,3),(b,2),(c,1)]
,还有另外两个,在你的例子中。使用和
zip
应该能让你达到目的。哦,你只考虑[1,2,3]的一半排列有什么原因吗?(例如[3,2,1]不存在)对我来说重要的是每个字母都与每个数字匹配,列表中的顺序并不重要,例如[a,1)、(b,2)、(c,3]==[(c,3),(b,2),(a,1)]啊,是的,但是在你的例子中,你似乎错过了匹配的
[(a,3),(b,2),(c,1)]
,以及另外两个。