中村 のりつぐ です。

In article <6.0.0.20.2.20040217141144.03db9dc0 / blade.nagaokaut.ac.jp> 
Shin-ichiro HARA <sinara / blade.nagaokaut.ac.jp> wrote:
> import System
> 
> main = do args <- getArgs
>           contents <- readFile (head args)
>           let ls = lines contents
>           mapM_ putStrLn (uniq Nothing ls)
> 
> uniq :: Maybe String -> [String] -> [String]
> uniq Nothing (l:ls) = l : uniq (Just l) ls
> uniq (Just preLine) (l:ls)
>  | preLine == l    = uniq (Just l) ls
>  | otherwise       = l : uniq (Just l) ls
> uniq _ []          = []
> 
> Maybe がわかり辛いのかな。Maybe を大きさ1のバッファとして
> 使っているんですよ。空の状態が Nothing で,x が入っている
> と Just x なんですね。うまいなあ。配列を使うと

まず、Maybe, Nothing, Just を分かっていなかったようです。
(まだ全然分かっていませんが…)


> でも,次のやり方の方が分かりやすいかも。
> 
> import System
> 
> main = do args <- getArgs
>           contents <- readFile (head args)
>           let ls = lines contents
>           mapM_ putStrLn (uniq ls)
> 
> uniq :: [String] -> [String]
> uniq (l:m:ls)
>   |l == m     = uniq (m:ls)
>   |otherwise  = l:uniq (m:ls) 
> uniq ls       = ls

これが今の私には一番 理解しやすいようです。

       中村 典嗣  E-mail:     nnakamur / mxq.mesh.ne.jp

--
ML: haskell-jp / quickml.com
使い方: http://QuickML.com/