Haskellで普通にFizzBuzz

深い意味は無いです、そういえば書いたこと無かったなぁと思ったので・・・

module Main where

fizzbuzz :: Integer -> String
fizzbuzz x
  | x `mod` 15==0 = "FizzBuzz"
  | x `mod` 3==0  = "Fizz"
  | x `mod` 5==0  = "Buzz"
  | otherwise = show x

main :: IO ()
main = putStrLn.show $ map fizzbuzz [1..100]

実行結果

$ runghc Main.hs
["1","2","Fizz","4","Buzz","Fizz","7","8","Fizz","Buzz","11","Fizz","13","14","FizzBuzz","16","17","Fizz","19","Buzz","Fizz","22","23","Fizz","Buzz","26","Fizz","28","29","FizzBuzz","31","32","Fizz","34","Buzz","Fizz","37","38","Fizz","Buzz","41","Fizz","43","44","FizzBuzz","46","47","Fizz","49","Buzz","Fizz","52","53","Fizz","Buzz","56","Fizz","58","59","FizzBuzz","61","62","Fizz","64","Buzz","Fizz","67","68","Fizz","Buzz","71","Fizz","73","74","FizzBuzz","76","77","Fizz","79","Buzz","Fizz","82","83","Fizz","Buzz","86","Fizz","88","89","FizzBuzz","91","92","Fizz","94","Buzz","Fizz","97","98","Fizz","Buzz"]

一旦[String]にしてしまえば、あとはどうにでも調理できますね。例えば・・・

module Main where

〜略〜

main :: IO ()
main = putStrLn.strJoin $ map fizzbuzz [1..30]
  where strJoin lst = concat $ map (\s -> s ++ "\n") lst

実行結果

$ runghc Main.hs
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz

こんな感じで、簡単なコードを色々書いてみるのも大事かなぁと思います。