假设我有两种物品

data Item1 = A | B | C
data Item2 = D | E | F

和两套
set1 = [A,B,C]
set2 = [D,E,F]

我想找到所有独特的方法来匹配两组中的项目,答案应该是(非正式表示法):
AD,BE,CF
AD,BF,CE
AE,BD,CF
AE,BF,CD
AF,BD,CE
AF,BE,CD

换句话说,我想要一些实现以下功能的功能:
combine :: [Item1] -> [Item2] -> [[(Item1,Item2)]]
combine = undefined

请注意,每个组合都应该是一个元组,并且上面的枚举方案中的每一行都应该是一个列表,例如:
[(A,D),(B,E),(C,F)]

最佳答案

用这个

import Data.List (sort, permutations)
combine as bs = zipWith zip (repeat as) (sort $ permutations bs)

10-08 12:35