我需要设计一个函数removeOrAdd :: a -> [a] -> [a]
。我的直接解决方案:
removeOrAdd :: Eq a => a -> [a] -> [a]
removeOrAdd x xs | x `elem` xs = [x' | x' <- xs, x' /= x]
| otherwise = x : xs
然而,我有一种感觉,我正在做已经被其他人完成的事情。 Haskell 中是否有已经执行此操作的功能?
更新:让我们将列表视为一个 Set
,我们不希望在列表中有多个 x
,否则我们将删除所有这些元素。
filter (/= x) xs
) - Robin Zigmondx
出现多次怎么办?您想删除所有这些项,还是只删除第一个/最后一个? - Willem Van Onsemnub
。关于列表推导式,有delete
:-) - Berginub
的意思,我想保留列表结构而不是每次都使用nub
,因为它是持久化记录的一部分,所以在受信任的范围内。 - mkUltra