これまでのまとめ
本日のお品書き
今回が個人的に一番キツかったです…。Haskell。
公式のチュートリアルがとても充実していてありがたいのですが、FizzBuzzしようと思うと、どうやって標準出力に出すんや?みたいなところで躓きました。
FizzBuzz
module Main where
fizzbuzz :: Int -> String
fizzbuzz n
| n `mod` 15 == 0 = "FizzBuzz" -- guardを使ってすっきり書く
| n `mod` 3 == 0 = "Fizz"
| n `mod` 5 == 0 = "Buzz"
| otherwise = show n -- otherwiseはTrueのエイリアス. show: Int -> String
main :: IO() -- ターミナルとのIOが許可されているのはmainのみ
-- mapM_/2 : リストの各要素に順番に処理を行う
-- map/2: リストの各要素に順番に処理を行ってリストを返す
main = mapM_ putStrLn (map fizzbuzz [1..100])
-- 関数の合成として次も等価
-- mapM_ putStrLn $ map fizzbuzz [1.100]
おまけ:実行方法
Onlineのplaygroundはあるのですが、関数を定義したり、標準出力したりする方法がわからなかったのでDockerで環境を構築し、スクリプトファイルを実行するようにしました。
FROM haskell:latest
COPY ./fizzbuzz.hs /
RUN ghc -o fizzbuzz fizzbuzz.hs
CMD ["./fizzbuzz"]
docker build -t haskell:fizzbuzz .
docker run --rm haskell:fizzbuzz