2026-08-24
Classify.hs
classify :: Int -> String
classify n
| n `mod` 15 == 0 = "fizzbuzz"
| n `mod` 3 == 0 = "fizz"
| n `mod` 5 == 0 = "buzz"
| otherwise = show n
main :: IO ()
main = mapM_ (putStrLn . classify) [3, 5, 15]
これは何を出力するでしょうか?
Answer
fizz、buzz、fizzbuzz — 1行ずつ。ガードは上から順に試され、最初にマッチしたものが採用されます。そのため、3でも5でも割り切れる数を判定するには、より狭いmod 3/mod 5のガードより先にmod 15をチェックする必要があります。そうしないと"fizz"で止まってしまい、"fizzbuzz"にはたどり着けません。