2008年04月22日

[Haskell] 指定した長さより長い文字列を取り出す

   このエントリーをはてなブックマークに追加 Clip to Evernote
標準入力から指定した長さよりも長い行だけを
標準出力へ複写するプログラムを書け。
 
main = do {
cs <- getContents;
args <- getArgs;
putStrLn $ unlines $ selectlines (read $ head args) $ lines cs
}

selectlines :: Int -> [String] -> [String]
selectlines n list = filter (\s -> (length s) >= n) list


このコードでのポイントは filter関数かな。
関数(ここではラムダ式)で与えた条件に一致するものだけを返す関数。
この場合は、文字列のリストから、長さが n 以上の文字列だけを
抜き出すというもの。

map と filterがあれば、随分といろんなことが出来そう。

C#のLINQではSelectとWhereに対応しているような感じですね。

main の do 記法は、いつもとちょっと変えて、{ } を使ってC#風に
書いてみた。
僕には、この方がしっくりきますね。
{ }を使わなければ、

main = do cs <- getContents
args <- getArgs
putStrLn $ unlines $ selectlines (read $ head args) $ lines cs



 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/51487771