我有一个清单:
let a = [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
我需要另一个清单:
[1, 2, 3] ++ [1*2, 2*3, 1*3] ++ [1*2*3]
Run Code Online (Sandbox Code Playgroud)
它是列表元素的所有可能独特组合的产物.我已经在Data.List中创建了排列,但是我认为它是不同的.
是否有任何库函数来获取此列表,或者您可以给我考试如何创建自己的函数.
谢谢.
对于库函数,您可以使用subsequencesfrom Data.List:
Prelude Data.List> subsequences [1,2,3]
[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
Run Code Online (Sandbox Code Playgroud)
您可以使用所有产品map product $ subsequences [1,2,3].
但这与您指定的顺序不同.所以你可以使用sortByfrom Data.List和comparingfrom 来对它进行排序Data.Ord:
Prelude Data.List Data.Ord> sortBy (comparing length) $ subsequences [1,2,3]
[[],[1],[2],[3],[1,2],[1,3],[2,3],[1,2,3]]
Run Code Online (Sandbox Code Playgroud)
再次,使用产品map product.
如果你正在学习Haskell,那么你自己编写函数的另一个想法是最好的想法.试试看!