列表的所有可能订单

时间:2016-02-16 03:13:44

标签: haskell

我试图教自己Haskell和我使用的书已经说过要创建一个列表,列出了所有可能的列表,例子如下(粗略翻译):

鉴于列表,ls = [1,2,3],有5种可能的形式:

[[1],[2],[3]]
[[1,2],[3]]
[[1,3],[2]]
[[2,3],[1]]
[[1,2,3]]

我怎么开始编码?

谢谢你,对不起英语,这不是我的第一语言。

1 个答案:

答案 0 :(得分:2)

扩展Daniel Wagner的评论:

首先,准确解释你想要什么。我会这样说:

  

给定一个列表xs :: [a],其元素都是不同的,生成一个列表yss :: [[[a]]],表示将xs的元素划分为非空列表的所有方法。

现在,考虑一下案例:

ways :: [a] -> [[[a]]]
ways [] = ?
ways (ys : yss) = ?

您可以预期第二种情况是递归的。您还可能需要编写至少一个辅助函数。