我需要在haskell中创建一个powerset函数,该函数接受一个set并输出没有重复条目的power set,而不管输入列表中放了什么。例如:[1,1]应该返回[[],[1]]

    powerset [] = [[]]
    powerset (x:xs) = union((powerset xs)) (map (x:) (powerset xs))

如果union是先前定义的函数,则它会紧接两个没有重复的集合。上面的代码的问题在于,它将重复项计为原始条目,因此输入[1,1]返回[[],[1],[1],[1,1]]。

有任何想法吗?我曾考虑过在触发powerset之前使用带有输入列表和空列表的并集来清除重复项,但是我不确定那会是什么样子。

最佳答案

  • 从给定列表中删除所有重复项(可以使用nub函数)。
  • 运行您现在正在使用的算法。
  • 10-06 06:22