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
トラックバック
コメント
-
mapは使ったほうがいいんじゃ
- 2008-08-07
- by p
- id:-
-
id:ujihisaにも同じこと言われたw
実は再帰を使ってみたかったというのが大きな理由ですね。mapはPHPでもJavaScriptでも散々使っていたので。- 2008-08-07
- by LiosK
- id:-