找到这两组物品的所有可能组合的聪明方法是什么?

时间:2014-09-02 15:56:09

标签: haskell

假设我有两种物品

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)]

1 个答案:

答案 0 :(得分:7)

使用此

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