0〜1000に含まれる0をカウントする

練習 - krystal: プログラミング超初心者(文系) - Rubyist via 0〜1000に含まれる0をカウントする - http://rubikitch.com/に移転しました

30分プログラム、その414。0から1000までの0の個数を数えてみる。
せっかくのErlangなのでmapreduceで。mapreduceのコードはProgramming Erlangのサンプルコードを流用した。(Source Code | The Pragmatic Bookshelf)

使い方

1> count_zero:count_zero(lists:seq(0,1000)).
193

ソースコード

-module(count_zero).
-compile([export_all]).

%% F1(Pid, X) -> sends {Key,Val} messages to Pid
count(Pid,0) ->
    Pid ! {0,1};
count(_Pid,N) when N < 10 ->
    void;
count(Pid,N) ->
    count(Pid,N rem 10),
    count(Pid,N div 10).

%% F2(Key, [Val], AccIn) -> AccOut
sum(_Key,L,_AccIn) ->
    lists:sum(L).

count_zero(L) ->
    phofs:mapreduce(fun count/2, fun sum/3, 0, L).