何だか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 なのかな。
だんだん慣れていきたい。