Edited at

HaskellでFizzBuzzを書く


HaskellでFizzBuzzを書いてみた。


fizzbuzz.hs

fizzBuzz :: Int -> String

fizzBuzz x
| x `mod` 15 == 0 = "FizzBuzz"
| x `mod` 5 == 0 = "Buzz"
| x `mod` 3 == 0 = "Fizz"
| otherwise = show x

fizzBuzz' :: [Int] -> [String]
fizzBuzz' intList = map (fizzBuzz) intList


FizzBuzz関数はIntを引数に取り、Stringを返します。

この関数は、



  • xが15の約数ならば、"FizzBuzz"


  • xが5の約数ならば、"Buzz"


  • xが3の約数ならば、"Fizz"

  • それ以外ならば、x

を返します。次に新しい関数fizzBuzz'を定義します。この関数は整数のリストを引数に取り、文字列のリストを返します。この関数内では、fizzBuzz関数を整数リストintListの各要素にmapで作用させています。

ghciを開き、このコードを:lで読み込み実行してみると、

Prelude> :l fizzBuzz

[1 of 1] Compiling Main ( fizzBuzz.hs, interpreted )
Ok, one module loaded.
*Main> fizzBuzz' [1..100]
["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"]

となり、3、5、15の倍数で、それぞれfizz、Buzz, FizzBuzzを出力できました。