我是 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/