FizzBuzz

なんでHaskellはS式で書かないんだろう.静的片付けなS式で書く言語は考えられないのかなぁ.


show, read, lines, unlines, putStr, putStrLnを手に入れたので,FizzBuzzを書いてみた.

main = putStr $ unlines $ take 100 $ map fizzbuzz [1..]
    where fizzbuzz x | mod x 15 == 0 = fizz ++ buzz
                     | mod x 5 == 0 = buzz
                     | mod x 3 == 0 = fizz
                     | otherwise = show x
              where fizz = "Fizz"
                    buzz = "Buzz"

fizzbuzzのところを,lambdaで書こうと思ったら,パターンマッチに複数のパターンが書けなかった.そういうものなの?case-ofを使ったらできたけど,しっくりこなかったのでwhereを使うことに.
2個目のwhereをどの位置に書くのがいいのかよくわからない.最低でも,1個目のwhereより深くインデントしてあればいいのかな.
Haskellむずいなぁ.ただ面白いことができそうだという予感はある.
マージソートよりFizzBuzzの方が難しい言語なんてそうそうないよね.