]>
<< djangoでRSSリーダーを作る(5) | main | HaskellにLibraryを追加する >>
interact :: (String -> String) -> IO()
interact f = do x <- getContents
putStr (f x)
文字列をとって文字列を返す関数fを引数とし、fを入力に適用したものを出力する。これは便利。
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)
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')
http://www.panopticon.jp/mt/mt-tb.cgi/81
コメントする