list - 如何使用列表删除函数中的重复元素?

标签 list function haskell element ghci

我是 Haskell 的新手,我对一些事情感到困惑。我正在尝试删除此函数列表中的重复元素:

qsort :: [Int] -> [Int]
qsort [] = []
qsort (x:xs) = 
     qsort smaller ++ [x] ++ qsort larger
     where 
          smaller = [a | a <- xs, a <= x] 
          larger = [b | b <- xs, b > x]

我尝试通过导入 Data.List 并使用 nub [] 函数来做到这一点:

qsort :: [Int] -> [Int]
qsort [] = nub[]

但是,如果我执行 qsort [2, 6, 3, 3],它仍然返回 [2, 3, 3, 6]。

我是否使用了 nub 函数错误,或者我还缺少其他什么东西?

谢谢

最佳答案

您的示例显示您仅在空列表 (nub []) 上使用 nub,这实际上不执行任何操作。您必须将其应用于 qsort 主体的结果:

qsort :: [Int] -> [Int]
qsort [] = []
qsort (x:xs) = 
     nub $ qsort smaller ++ [x] ++ qsort larger
     where 
          smaller = [a | a <- xs, a <= x] 
          larger = [b | b <- xs, b > x]

然而,这不必要地昂贵,因为它在函数的每个分支上运行nub。进一步的优化留给您。

关于list - 如何使用列表删除函数中的重复元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49007617/

相关文章:

unit-testing - 如何有条件地拆除Tasty中的testbed资源?

R 检查是否有任何缺少的参数

c: a.exe 已停止工作

haskell - 如何重置 Haskell 包缓存

postgresql - 在 'bytes' 中存储 postgresql 中的 Html 类型结果

Javascript - 函数存储为变量时立即执行?

python-3.x - 如何将列表中的元素作为索引传递给Python中的列表?

python - 如何使用 NumPy 从列表创建多维数组?

javascript - 将子 <ul> 最小宽度设置为与父 <li> 宽度相同

java - 将 HashMap 的 HashMap 转换为 ArrayList 的 ArrayList