从集合中删除子集

时间:2017-04-03 13:38:07

标签: haskell

这可能是微不足道的,但我仍然坚持编写一个从集合本身中删除集合子集的函数(找到它的补充)。
我的功能是:

removeSubset :: (Eq a) => [a] -> [a] -> [a] 
removeSet [] ys = Just ys
removeSet --This is where I don't know how to remove the subset

任何帮助都会非常感激,因为我是Haskell的新手。

1 个答案:

答案 0 :(得分:4)

你不需要将结果包装在Maybe中,因为你可能总是返回空列表。

最简单的实施方式是:

removeSet xs ys = filter (not . (`elem` xs)) ys 

eta减少后:

removeSet xs = filter (not.(`elem`xs))

对于更多代码高尔夫的无点(无点)风格,它也可以写成:

removeSet = filter.((not.).(flip elem))

对于使用递归的更直接的解决方案,您可以始终使用:

removeSet _  []    = []
removeSet [] ys    = ys
removeSet xs (y:ys)= if element y xs then removeSet xs ys else y:removeSet xs ys
  where element x [] = False
        element x (l:ls) = if l == x then True else element x ls