我需要一个函数来获取(项目列表)列表,并枚举每个列表中每个项目的所有可能组合。所以
someCombo :: [[a]] -> [[a]]
someCombo = undefined
如果我有这样的事情
[
[a1,b1],
[a2,b2,c2],
[a3,b3]
]
我想吐出这样的答案,每个列表的每个元素都与其他每个列表的每个元素匹配。大概在这种情况下,最终列表中有 12 个元素。
[
[a1,a2,a3],[a1,a2,b3],[a1,b2,a3],[a1,b2,b3],...,[b1,c2,b3]
]
main 参数中可以有任意数量的列表。这看起来应该很简单,但我无法完全理解它。我可以为两个或三个列表做这件事,但我不能让它递归地工作任意数量的列表。哦,我不在乎结果列表的顺序,只要我拥有全部 12 个(或其他)。
如果有人好奇这是为了什么,这是我需要实现的最后一块算法,该算法确定我在每次举重之前将盘子放在杠铃上的顺序,这将最大限度地减少我在每次锻炼中所做的盘子洗牌量。我认为这可能会为我每次锻炼节省几分钟。为了做到这一点,我需要列举所有可能的训练,这些训练涉及每次升降机的一组特定盘子,然后找到每个升降机的盘子顺序组合,从而导致最少的改组。