fizzbuzz
http://chaton.practical-scheme.net/gauche/a/2012/08/09#entry-5023d040-7e774 のPythonコードが分かりやすかったので、Haskellで書いてみました。
fizz = cycle ["", "", "fizz"] buzz = cycle ["", "", "", "", "buzz"] fizzbuzz n = [if xy == "" then show z else xy | (x, y, z) <- zip3 fizz buzz [1..n], let xy = x ++ y]
実行結果です。
$ ghci GHCi, version 7.4.1: http://www.haskell.org/ghc/ :? for help Loading package ghc-prim ... linking ... done. Loading package integer-gmp ... linking ... done. Loading package base ... linking ... done. Prelude> :l fizzbuzz [1 of 1] Compiling Main ( fizzbuzz.hs, interpreted ) Ok, modules loaded: Main. *Main> fizzbuzz 30 ["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"]
ifのthenの方にxyを持ってきた方がいいかもしれないけど悩む。
if xy /= "" then xy else show z