Haskell で Fizzbuzz

main :: IO()
main = do
	let
		fizzbuzz :: Int -> String
		fizzbuzz n	| n `mod` 15 == 0	 = "fizzbuzz"
				| n `mod` 3 == 0	 = "fizz"
				| n `mod` 5 == 0	 = "buzz"
				| otherwise			 = show n
	let
		fizzbuzz_lst :: Int -> [String]
		fizzbuzz_lst upper = [ fizzbuzz n | n

Fizzbuzz,こんなのを書きました.

Haskellではswitch構文の代わりに,数学の場合分けで使う { みたいなのをそのまま書きます.

otherwise なんかそのままですね.

fizzbuzz_lst は upper を引数にとる関数で,upperを上限にfizzbuzzを実行します.

逆に,こうしなければ 無限リスト(集合) をそのまま相手にすることができます.これもHaskellの特徴として随所に書かれていることですね.

個人的に,詰まったのは putStrLn と unlines だったりしますwww

putStrLn は文字列の最後に改行を入れて返します.

Prelude> putStrLn "ABCDE"
ABCDE

一方, putStr は改行を入れません.

Prelude> putStrLn "ABCDE"
ABCDEPrelude>

unlines は リストを改行挟んで返します.

Prelude> unlines ["1", "2", "3"]
"1\n2\n3\n"

Haskellを触ることは日常でも趣味でも殆どないんですが面白いな,と思います.

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中