izzbuzz :: Int -> String
fizzbuzz n | (n `mod` 15) == 0 = "fizzbuzz"
| (n `mod` 3) == 0 = "fizz"
| (n `mod` 5) == 0 = "buzz"
| otherwise = show n
main = do
print $ map fizzbuzz [1,2 .. 20]
showによってprintの前に型の情報がつぶされているので気に入らなかった。で・・・・eitherとかmaybeってものがある。これをつかうとfizzbuzz関数が返す型が本質的に記述できる
fizzbuzz :: Int -> Either String Int
fizzbuzz n | (n `mod` 15) == 0 = Left "fizzbuzz"
| (n `mod` 3) == 0 = Left "fizz"
| (n `mod` 5) == 0 = Left "buzz"
| otherwise = Right n
main = do
print $ map fizzbuzz [1,2 .. 20]
ありがちな無限列を返すという形にしてみる。
fizzbuzz :: Int -> Either String Int
fizzbuzz n | (n `mod` 15) == 0 = Left "fizzbuzz"
| (n `mod` 3) == 0 = Left "fizz"
| (n `mod` 5) == 0 = Left "buzz"
| otherwise = Right n
fizzbuzzStream :: [Either String Int]
fizzbuzzStream = map fizzbuzz [1,2 ..]
main = do
print $ take 20 fizzbuzzStream
"/ \$"を消去とか清書。
fizzbuzz :: Int -> Either String Int
fizzbuzz n
| n `mod` 15 == 0 = Left "fizzbuzz"
| n `mod` 3 == 0 = Left "fizz"
| n `mod` 5 == 0 = Left "buzz"
| otherwise = Right n
fizzbuzzStream :: [Either String Int]
fizzbuzzStream = map fizzbuzz [1,2 ..]
main = do
print $ take 20 fizzbuzzStream
0 件のコメント:
コメントを投稿