假设我有两种物品
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)]
答案 0 :(得分:7)
使用此
import Data.List (sort, permutations)
combine as bs = zipWith zip (repeat as) (sort $ permutations bs)