Haskellっぽいfizzbuzz書けた!
- 2008-07-28
- カテゴリ: その他のプログラミング
- タグ: Haskell 入門 関数志向
昨晩、突然ひらめいてHaskellでfizzbuzzを書いてみた。
fizzbuzz :: Integer -> Integer -> [String]
fizzbuzz x y | x > y = []
| (mod x 15) == 0 = "FizzBuzz" : fizzbuzz (x + 1) y
| (mod x 3) == 0 = "Fizz" : fizzbuzz (x + 1) y
| (mod x 5) == 0 = "Buzz" : fizzbuzz (x + 1) y
| otherwise = (show x) : fizzbuzz (x + 1) y
なんかすごくHaskellっぽいコードを書けたような気がするんだけどどうだろう?少なくとも、依然書いた↓のfizzbuzzよりは手続き色が抜けてるんじゃないかな?
proceduralFizzbuzz :: Integer -> Integer -> [String]
proceduralFizzbuzz x y = map f [x..y]
where f n = if 0 == mod n 15
then "FizzBuzz"
else if 0 == mod n 3
then "Fizz"
else if 0 == mod n 5
then "Buzz"
else show n
このコードとか、↓のPythonコードとほとんど変わらん><
def pythonFizzbuzz(x, y):
for n in range(x, y + 1):
if 0 == n % 15:
print "FizzBuzz"
elif 0 == n % 3:
print "Fizz"
elif 0 == n % 5:
print "Buzz"
else:
print n
なんとなく関数型言語の書き方がわかったような気がしたから、この調子でがんばるぞー
トラックバックURL
- http://liosk.blog103.fc2.com/tb.php/134-dc14dc63
0 件のトラックバック
2 件のコメント
-
mapは使ったほうがいいんじゃ
- 2008-08-07
- by p
- id:-
-
id:ujihisaにも同じこと言われたw
実は再帰を使ってみたかったというのが大きな理由ですね。mapはPHPでもJavaScriptでも散々使っていたので。- 2008-08-07
- by LiosK
- id:-

