何だかFizzBuzz書くのが HelloWorld の代わりみたいになっているような気がします。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/env escript

main(Args) ->
    N = list_to_integer(erlang:hd(Args)),   % Arguments[0] to a Number
    lists:foreach(
        fun(X) -> io:format("~p~n", [X]) end,
        fizzBuzz(N)).

% Get FizzBuzz Array
%    N is max number of FizzBuzz
fizzBuzz(N) ->
    lists:foldl(
        fun
            (X, Sum) when X rem 15 =:= 0 -> Sum ++ ["FizzBuzz"];
            (X, Sum) when X rem  5 =:= 0 -> Sum ++ ["Buzz"];
            (X, Sum) when X rem  3 =:= 0 -> Sum ++ ["Fizz"];
            (X, Sum)                     -> Sum ++ [integer_to_list(X)]
        end,
        [],
        lists:seq(1, N)
    ).

※コンパイルが面倒だったのでescript使ってます。

  • 何度か迷子になりながら書きました。
  • writeとかfwriteとかformatとかわけわかめ。。。とりあえず io:format/2 だけ覚えよう。
  • ifの代わりにガード!っていう感覚。
  • Rubyで言うと・・・
    • lists:seq は Range
    • lists:foldl は inject  なのかな。

だんだん慣れていきたい。