我需要为我的一个分配编写一个简单的函数,它应该删除给定列表中的所有重复项,除了列表中第一个出现的元素.这是我写的:
remDup :: [Int]->[Int]
remDup []=[]
remDup (x:xs)
| present x xs==True = remDup xs
| otherwise = x:remDup xs
where
present :: Int->[Int]->Bool
present x [] = False
present x (y:ys)
| x==y =True
| otherwise = present x ys
Run Code Online (Sandbox Code Playgroud)
但是这个代码删除了重复项,除了元素的最后一次出现.也就是说,如果给定的列表是[1,2,3,3,2]生成[1,3,2]而不是[1,2,3].怎么做反过来呢?
Eri*_*ikR 10
这个想法怎么样:
remDup [] = []
remDup (x:xs) = x : remDup ( remove x xs )
Run Code Online (Sandbox Code Playgroud)
其中remove x xs从列表xs 中删除所有出现的x(作为练习留下的实现.)
| 归档时间: |
|
| 查看次数: |
254 次 |
| 最近记录: |