0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

多言語FizzBuzzチャレンジ19日目:Haskell

Last updated at Posted at 2022-12-18

これまでのまとめ

本日のお品書き

今回が個人的に一番キツかったです…。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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?