cud*_*dle 0 haskell functional-programming
我是Haskell的新手.我试图在Haskell中编写代码,从列表中找到第一个重复元素,如果它没有重复元素,则给出消息没有重复.我知道我可以通过nub
功能来做到这一点,但我试图在没有它的情况下做到这一点.
这是一种方法:
import qualified Data.Set as Set
dup :: Ord a => [a] -> Maybe a
dup xs = dup' xs Set.empty
where dup' [] _ = Nothing
dup' (x:xs) s = if Set.member x s
then Just x
else dup' xs (Set.insert x s)
dupString :: (Ord a, Show a) => [a] -> [Char]
dupString x = case dup x of
Just x -> "First duplicate: " ++ (show x)
Nothing -> "No duplicates"
main :: IO ()
main = do
putStrLn $ dupString [1,2,3,4,5]
putStrLn $ dupString [1,2,1,2,3]
putStrLn $ dupString "HELLO WORLD"
Run Code Online (Sandbox Code Playgroud)
下面是它的工作原理:
*Main> main
No duplicates
First duplicate: 1
First duplicate: 'L'
Run Code Online (Sandbox Code Playgroud)