表示されているすべての要素のセットを保持し、まだ表示されていない場合は現在の要素のみを保持できます。
import Data.Set
removeDups :: Ord a => [a] -> Set a -> [a]
removeDups [] sofar = []
removeDups (x:rest) sofar
| member x sofar = (removeDups rest sofar)
| otherwise = x:(removeDups rest (insert x sofar))
使用法:
removeDups "Heello" empty -- "Helo"
removeDups "Chocolate" empty -- "Choclate"
実行時間はO(n log n)
だと思います。
nub
または、次から使用できますData.List
。
Prelude Data.List> import Data.List
Prelude Data.List> nub "Heello"
"Helo"
Prelude Data.List> nub "Chocolate"
"Choclate"
ランタイムはO(n^2)
.