Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
构建自己的函数以从Haskell中的列表中删除重复元素_Haskell - Fatal编程技术网

构建自己的函数以从Haskell中的列表中删除重复元素

构建自己的函数以从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

我正在尝试构建一个函数,该函数将从列表中删除所有重复项。假设我从列表[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 (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