Namaran

Code daily. Without assist.

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

fizzbuzzfizzbuzz — 1行ずつ。ガードは上から順に試され、最初にマッチしたものが採用されます。そのため、3でも5でも割り切れる数を判定するには、より狭いmod 3/mod 5のガードより先にmod 15をチェックする必要があります。そうしないと"fizz"で止まってしまい、"fizzbuzz"にはたどり着けません。