Haskell の練習のため、Fizzbuzzを書いた。最初本当に何も書けなくてびっくりした。
fizzbuzz :: Int -> [String] fizzbuzz 0 = [] fizzbuzz x | x `mod` 15 == 0 = fizzbuzz (x-1) ++ ["FizzBuzz"] | x `mod` 3 == 0 = fizzbuzz (x-1) ++ ["Fizz"] | x `mod` 5 == 0 = fizzbuzz (x-1) ++ ["Buzz"] | otherwise = fizzbuzz (x-1) ++ [show x]
実行結果
*Main> fizzbuzz 16 ["1","2","Fizz","4","Buzz","Fizz","7","8","Fizz","Buzz","11","Fizz","13","14","FizzBuzz","16"]
思考過程
- まず、標準出力に表示するのが無理なところで詰まる
- 結果をリストに格納していくことにする
- リスト内に Int, String が混在できないので詰まる
- 調べると show を使えば数字->文字列はなんとかなると判明する
- fizzbuzz [1..x] などと書き、わけがわからず手が止まる
- 処理過程の結果リストを保存しておかないといけない...などと考えてしまい詰まる
- H本の内包表記、畳込みなどを読み返す
- 再帰で表現しなければいけないことに気づく
- "FizzBuzz"が"Fizz"になってしまう問題でハマる
- ガードの条件の順番が原因と判明
- 完成
所感
あまりに書けなさすぎて本当につらかったが、動いた瞬間は感動があった。

- 作者: MiranLipovaca
- 出版社/メーカー: オーム社
- 発売日: 2017/07/14
- メディア: Kindle版
- 購入: 4人 クリック: 9回
- この商品を含むブログを見る