]> Panopticon :: Haskell :: interact

<< djangoでRSSリーダーを作る(5) | main | HaskellにLibraryを追加する >>

interact

interact :: (String -> String) -> IO()
interact f = do x <- getContents
                putStr (f x)

文字列をとって文字列を返す関数fを引数とし、fを入力に適用したものを出力する。これは便利。

Python Challenge(1)

import Char

shift :: Char -> Char 
shift a
 | a == 'z' = 'a'
 | isLower a = chr $ ord a + 1
 | otherwise = a

main :: IO()
main = do x <- getContents
          putStr $ last $ take 3 $ iterate (map shift) x

main :: IO()
main = interact $ last . take 3 . iterate (map shift)

Python Challenge(3)

import Text.ParserCombinators.Parsec 

bodyguards :: Parser String
bodyguards = try ( do { upper; upper; upper ; c <- lower
                ; upper; upper; upper; many1 lower; return [c] })
            <|> do { skipMany1 upper ; skipMany1 lower ; return ""}

bg :: Parser String
bg = do { many lower ; r <- many1 (try bodyguards)
        ; many upper ; eof ; return $ concat r }

readBdGrs :: String -> String
readBdGrs input = case parse bg "" input of
   Left err -> "No match: " ++ show err
   Right val -> show val

main :: IO()
main = do x <- getContents
          putStrLn $ readBdGrs $ filter (/= '\n') x

main :: IO()
main = interact $ readBdGrs . filter (/= '\n')
カテゴリ

Trackback URI

http://www.panopticon.jp/mt/mt-tb.cgi/81

Trackbacks(0)

コメントする