文字列に含まれる単語の最初の文字を大文字にする

30分プログラム、その625。エロと風俗情報満載 どう抜く?をやってみよう。
要するに、"hello world"を与えたときに"Hello World"を返すプログラムを作ればいいんだよね。
ライブラリを探せばずばりそのものの関数がありそうな気がしたので、なるべくライブラリの関数を使わない方向でがんばってみた。toUpperのコードとか割りとうまく書けたと思う。

使い方

$ ghc --make capitalize.hs
$ ./capitalize hoge
Hoge
$ ./capitalize "hello world"
Hello World

ソースコード

import System
toUpper :: Char -> Char
capitalizeWord :: String -> String
capitalize :: String -> String

toUpper c = case lookup c table of
              Just d -> d
              Nothing -> c
    where table = zip ['a'..'z'] ['A'..'Z']

capitalizeWord [] = []
capitalizeWord (c:cs) = toUpper c:cs

capitalize s = unwords $ map capitalizeWord $ words s

main = do args <- getArgs
          mapM_ putStrLn $ map capitalize args