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

FizzBuzz

erlang

erlang 初めて書いた。

1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。

http://www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm
-module(fizzbuzz).
-compile(export_all).

fb(N) ->
    if N rem 15 == 0 -> "FizzBuzz";
       N rem  3 == 0 -> "Fizz";
       N rem  5 == 0 -> "Buzz";
       true          -> integer_to_list(N)
    end.

fizzbuzz(N, MAX) ->
    io:format('~s~n', [fb(N)]),
    if N < MAX -> fizzbuzz(N+1, MAX);
       true    -> true
    end.

fizzbuzz(MAX) -> fizzbuzz(1, MAX).

[追記]
リストを使えば再帰しないで書けるのか。

fizzbuzz_list(MIN, MAX) ->
    [ io:format('~s~n', [fb(X)]) || X <- lists:seq(MIN, MAX) ].

fizzbuzz_map(MIN, MAX) ->
    lists:map( fun(X) -> io:format('~s~n', [fb(X)]) end, lists:seq(MIN, MAX) ).