Hatena::Grouphaskell

knenetのhaskell手記

2007-10-02

fizzbuzz 08:37 はてなブックマーク - fizzbuzz - knenetのhaskell手記

コードを書くのに慣れるために、FizzBuzz問題を解いてみる。

main = fizzBuzz [1..100]

fizzBuzz (x:xs) = do putFizzBuzz x
                     fizzBuzz xs
fizzBuzz [] = putStrLn "done."

putFizzBuzz x | mod x 15 == 0 = putStrLn "FizzBuzz"
              | mod x 5 == 0  = putStrLn "Buzz"
              | mod x 3 == 0  = putStrLn "Fizz"
              | True          = print x

解き始めてテストして動作を確かめるまで5分くらいだった。

もう少し時間をかければ、もっと良いコードになるだろうけど、FizzBuzzを詰めても仕方がないので問題を挙げるだけに留める。


FizzBuzz問題は、「繰り返し」と「分岐」と「異なる型の表示」の3つの問題を含んでいる。

haskellでは、一番ネックになるのは異なる型を扱い、それを表示することではないだろうか。

今回は、表示する段で条件分岐して、それぞれの値に対する表示を行った。

他には、新しい型を作って、それでFizzBuzzリストを作るとか。そうすれば表示側は分岐しなくて済む。