Cogito Ergo Sum.

我思う故に我あり

9日目のFizzBuzz

・9日目のFizzBuzz

main = loop [1..100]
loop [] = return ()
loop (n:ns) = do
    putStrLn(fizzBuzz n)
    loop(ns)
fizzBuzz n
    | n `mod` 15 == 0 = "FizzBuzz"
    | n `mod`  5 == 0 = "Buzz"
    | n `mod`  3 == 0 = "Fizz"
    | otherwise       = show n

 「1日目のFizzBuzz」(下記参照)のループはこう書けば良かったのか…。

 Haskellの「return ()」は命令型(手続き型)プログラミング言語における「return();」とは全く意味合いが異なるようで要注意だ。見た目はソックリなのに…。

 Haskellの勉強を始めて2週間強、I/Oアクションの仕組みがようやくわかってきて、Paizaのスキルチェックの「Dランク」問題なら解けるようになってきた。「Cランク」問題は解ける問題もあるけど、「Cランクの過去問、全問制覇!」はまだちょっと難しそう…。

 

・1日目のFizzBuzz

main = loop [1..100]
loop (x:[]) = putStrLn(fizzBuzz x)
loop (x:xs) = do
    putStrLn(fizzBuzz(x))
    loop(xs)
fizzBuzz x
    | x `mod` 15 == 0 = "FizzBuzz"
    | x `mod`  5 == 0 = "Buzz"
    | x `mod`  3 == 0 = "Fizz"
    | otherwise       = show x