我是 Haskell 的新手,我正在尝试编写一个(有点)基本的递归函数来生成集合的分区。我正在引用这个维基页面(https://en.wikipedia.org/wiki/Partition_of_a_set https://en.wikipedia.org/wiki/Partition_of_a_set)作为我对集合分区的定义。
我目前有一个函数可以生成大部分(但不是全部)分区:
separate :: [a] -> [[[a]]]
separate [] = [[]]
separate (b:bs) = [[b]:s | s <- separate bs] ++ [(b:qs):qss | (qs:qss) <- separate bs]
>separate [1,2,3]
[[[1],[2],[3]],[[1],[2,3]],[[1,2],[3]],[[1,2,3]]]
正如你所看到的,它缺少[[1,3],[2]]
变体。
我想知道是否可以轻松修改此函数以满足我的要求,或者是否需要创建一个全新的函数。谢谢。