在haskell的排列

dem*_*mas 2 haskell list

我有一个清单:

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中创建了排列,但是我认为它是不同的.

是否有任何库函数来获取此列表,或者您可以给我考试如何创建自己的函数.

谢谢.

Yit*_*itz 6

对于库函数,您可以使用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.Listcomparingfrom 来对它进行排序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,那么你自己编写函数的另一个想法是最好的想法.试试看!