震源地: http://d.hatena.ne.jp/JunichiIto/20111007/1317976730
なんか Twitter で FizzBuzz が話題になってたんですが,ふと
「そういや Haskell の使いはじめの頃,練習がてら FizzBuzz を書こうとして苦戦してたなぁ」
と思い出したので,今なら楽に書けるかも,と思い,ちょいと書いてみることにしました.
追記( 23:45, 10/15 ): otherwise
を間違って使っていたのを _
に修正 http://d.hatena.ne.jp/gintenlabo/20111015/1318689620
import System isMultOf :: Integral a => a -> a -> Bool x `isMultOf` n = ( x `rem` n == 0 ) fizzBuzz :: Integral a => a -> String fizzBuzz n = fizzBuzz' ( n `isMultOf` 3 ) ( n `isMultOf` 5 ) where fizzBuzz' False False = show n fizzBuzz' True False = "Fizz" fizzBuzz' False True = "Buzz" fizzBuzz' True True = "FizzBuzz" main = do args <- System.getArgs let n = case args of [] -> 30 -- Ideone にうpするので無引数にも対応 [x] -> read x _ -> error "Invalid Program Option" mapM_ putStrLn $ map fizzBuzz [1..n]
所要時間は10分くらい.
…うん,何の捻りもないコードだ.
しかし, Haskell を使いはじめの頃は,こんなコードでも苦戦したわけで,
なんだかんだで FizzBuzz 問題を解かせるのは,実力を測るのに有用なのかもしれません.
特に Haskell みたいな言語の場合には,なんとなく知ってても,実際にコードを書いたことのない人って意外と多いですし.