読者です 読者をやめる 読者になる 読者になる

c4se記:さっちゃんですよ☆

.。oO(さっちゃんですよヾ(〃l _ l)ノ゙☆)

.。oO(此のblogは、主に音樂考察Programmingに分類されますよ。ヾ(〃l _ l)ノ゙♬♪♡

音樂はSoundCloud等バラバラの場所に公開中です。申し訳ないがlinkをたどるなどして探してください。

考察は現在は主に此のblogで公表中です。

programmingは、ひろくみせるものはGitHubで、個人的なものはBitBucketで開発中です。

c4se

初kell

Programming Erlang Haskell

HaskellFizzBuzz書く丈で死にそうに成った。

module Main where
import System.Environment

fb :: Int -> String
fb num | num `mod` 15 == 0 = "FizzBuzz"
       | num `mod` 3 == 0  = "Fizz"
       | num `mod` 5 == 0  = "Buzz"
       | otherwise         = show num

fizzbuzz :: Int -> [String]
fizzbuzz num = map fb [1..num]

main :: IO ()
main = do
  args <- getArgs
  mapM_ putStrLn (fizzbuzz $ read (args !! 0))

Erlangにもlists:maplists:seq等有り、それらを使うのが行儀が良いのだろうが、FizzBuzz程度ならパターンマッチと再帰を使うのが拙速である。

追記20120828

パターンマッチと再帰を使う方法は、ついこの間書いたので([FizzBuzz #erlang http://c4se.hatenablog.com/entry/2012/06/29/222300 ])、真面目にlistsモジュールとlist内包表記を使う。

-module(fizzbuzz).
-export([start/0]).

%% 1> c(fizzbuzz).
%% 2> fizzbuzz:start().
%% <0.54.0>
%% 3> pid(0, 54, 0) ! 100.

start() -> spawn(fun() -> loop() end).

loop() ->
  receive
    N ->
      io:fwrite(fizzbuzz(N)),
      loop()
  end.

fizzbuzz(N) ->
  lists:concat([fbitem(X) || X <- lists:seq(1, N)]).

fbitem(N) when N rem 15 == 0 -> "FizzBuzz";
fbitem(N) when N rem 3 == 0 -> "Fizz";
fbitem(N) when N rem 5 == 0 -> "Buzz";
fbitem(N) -> N.