Help us understand the problem. What is going on with this article?

HaskellでFizzBuzzを書く

More than 1 year has passed since last update.

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を出力できました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away