Fizz Buzz em Erlang com recursão da cauda

Já vi várias implementações de fizzbuzz por aí. Mine implementa recursão de cauda, ​​que é uma prática comum (às vezes melhor) em erlang para melhorar o caminho de chamada para listas maiores.

-module(fizzbuzz).
-compile(export_all).

run
() ->
run
(lists:seq(1,100), []).

run
([], Acc) ->
lists
:reverse(Acc);
run
([H|T], Acc) ->
run
(T, [print_string(H)|Acc]).

print_string
(X) when X rem 15 =:= 0 ->
"FizzBuzz";
print_string
(X) when X rem 3 =:= 0 ->
"Fizz";
print_string
(X) when X rem 5 =:= 0 ->
"Buzz";
print_string
(X) ->
integer_to_list
(X).

Aproveitar!