Haskellっぽいfizzbuzz書けた!

Haskellっぽいfizzbuzz書けた!

昨晩、突然ひらめいて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

codepadで実行

なんかすごく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:-

コメントの投稿

お名前
コメント
編集キー