haskell中一个列表到无限列表的所有组合

m4pnthwp  于 2022-11-30  发布在  其他
关注(0)|答案(1)|浏览(125)

我的任务是在Haskell中实现一个函数allCombinations,该函数将给定列表的所有可能组合作为无限列表返回。
由于我找不到一个解决方案,其中不包括进口,我会再问一次。我是新的Haskell和我的任务是创建一个函数allCombinations :: [a] -> [[a]],它创建了一个无限的可能的组合列表。例如:take 10 (allCombinations [True,False]),作为回报,我应该得到[[],[True],[False],[True,True],[False,True],[True,False],[False,False],[True,True,True],[False,True,True],[True,False,True]]。我已经找到了一些解决方案,但所有这些都包括导入,我需要解决这个没有任何导入。

mklgxw1f

mklgxw1f1#

你可以在这里使用递归。这从空列表开始,然后递归到你在前面加上给定列表和列表中的项的地方,所以:

allCombinations :: [a] -> [[a]]
allCombinations xs = zs
  where zs = [] : [ (y:ys) | ys <- zs, y <- xs ]

相关问题