あたしゃFizzBuzzも書けねえのかよ……。
-module(zampan). -compile(export_all). fizzbuzz(N) -> fizzbuzz(N, []). fizzbuzz(0, Acum) -> lists:concat(lists:map(fun(Elm) -> io:format("~p ", [Elm]) end, Acum)); fizzbuzz(N, Acum) -> if (N rem 3 == 0) and (N rem 5 == 0) -> fizzbuzz(N - 1, ["Fizzbuzz" | Acum]); N rem 3 == 0 -> fizzbuzz(N - 1, ["Fizz" | Acum]); N rem 5 == 0 -> fizzbuzz(N - 1, ["Buzz" | Acum]); true -> fizzbuzz(N - 1, [N | Acum]) end.
此れを利用して、FizzBuzzサーバを作る版。
-module(zampan). -export([start/0, fizzbuzz/1]). -compile(export_all). %% 1> c(zampan). %% 2> zampan:start(). %% <0.175.0> %% 3> pid(0, 175, 0) ! 100. start() -> spawn(fun() -> fizzbuzz_server() end). fizzbuzz_server() -> receive N -> io:fwrite("~p~n", [fizzbuzz(N)]), fizzbuzz_server() end. fizzbuzz(N) -> fizzbuzz(N, []). fizzbuzz(0, Acum) -> lists:concat(lists:map(fun(Elm) -> io:format("~p ", [Elm]) end, Acum)); fizzbuzz(N, Acum) when N > 0 -> if N rem 15 == 0 -> fizzbuzz(N - 1, ["Fizzbuzz" | Acum]); N rem 3 == 0 -> fizzbuzz(N - 1, ["Fizz" | Acum]); N rem 5 == 0 -> fizzbuzz(N - 1, ["Buzz" | Acum]); true -> fizzbuzz(N - 1, [N | Acum]) end.