FizzBuzz かいてみた (Erlang)

なんかださい。
が、なんかとりあえず覚えたこと使ってみようかと思ったのでヨシとしよう。

-module(fizzbuzz).
-export([fizzbuzz/1]).
-export([fizzbuzz/2]).

fizzbuzz(L) -> fizzbuzz(L, []).

fizzbuzz([], R) -> lists:reverse(R);
fizzbuzz([X|T], R) when X rem 15 =:= 0 -> fizzbuzz(T, [fizzbuzz|R]);
fizzbuzz([X|T], R) when X rem 3 =:= 0 -> fizzbuzz(T, [fizz|R]);
fizzbuzz([X|T], R) when X rem 5 =:= 0 -> fizzbuzz(T, [buzz|R]);
fizzbuzz([X|T], R) -> fizzbuzz(T, [X|R]).

アキュムレータ、ガード、とか。

実行すると

1> c(fizzbuzz).
{ok,fizzbuzz}       
2> fizzbuzz:fizzbuzz(lists:seq(1,30,1)).
[1,2,fizz,4,buzz,fizz,7,8,fizz,buzz,11,fizz,13,14,fizzbuzz,
 16,17,fizz,19,buzz,fizz,22,23,fizz,buzz,26,fizz,28,29|...]

しょ・・省略されちまっただ。まあなにもリストで返さなくてもいいんだろうけどリストで作ったもんはリストにしてやりたいとか勝手に思ったり(
まあできてるでしょう多分・・・?


これ、かっこいいなあ(?


プログラミングErlang

プログラミングErlang