这可能是微不足道的,但我仍然坚持编写一个从集合本身中删除集合子集的函数(找到它的补充)。
我的功能是:
removeSubset :: (Eq a) => [a] -> [a] -> [a]
removeSet [] ys = Just ys
removeSet --This is where I don't know how to remove the subset
任何帮助都会非常感激,因为我是Haskell的新手。
答案 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