构建自己的函数以从Haskell中的列表中删除重复元素
我正在尝试构建一个函数,该函数将从列表中删除所有重复项。假设我从列表[1,2,1,3,2,4]开始,我只想得到没有重复元素的[3,4]。如何在不使用构建自己的函数以从Haskell中的列表中删除重复元素,haskell,Haskell,我正在尝试构建一个函数,该函数将从列表中删除所有重复项。假设我从列表[1,2,1,3,2,4]开始,我只想得到没有重复元素的[3,4]。如何在不使用elem的情况下重写以下代码 rmds :: (Eq a) => [a] -> [a] rmds [] = [] rmds [x] = [x] rmds (x:xs) | elem x (xs) = [k|k <- rmds (xs) , k /= x] | otherwise = x : [c| c <- rmds
elem
的情况下重写以下代码
rmds :: (Eq a) => [a] -> [a]
rmds [] = []
rmds [x] = [x]
rmds (x:xs)
| elem x (xs) = [k|k <- rmds (xs) , k /= x]
| otherwise = x : [c| c <- rmds (xs), c /=x]
rmds::(等式a)=>[a]->[a]
rmds[]=[]
rmds[x]=[x]
rmds(x:xs)
|elem x(xs)=[k | k您可以使用\\
操作符来实现您想要的:
导入数据。列表
rmds::Ord a=>[a]->[a]
rmds[]=[]
rmds[x]=[x]
rmds zs@(x:y:xs)=zs\\dups zs
其中dups=concat.filter(>1.length).group.sort
这里的核心思想是找到列表中的所有重复项,然后使用\\
从原始列表中删除所有重复项。如果您只删除该测试,您的代码将实际工作
rmds :: Eq a => [a] -> [a]
rmds [] = []
rmds [x] = [x]
rmds (x:xs) = x : [c | c <- rmds xs, c /= x]
rmds::Eq a=>[a]->[a]
rmds[]=[]
rmds[x]=[x]
rmds(x:xs)=x:[c | c