[erlang-questions] Performance Testing with C++, Java, Ruby and Erlang

Ulf Wiger (TN/EAB) <>
Mon Sep 10 09:30:23 CEST 2007


Ulf Wiger (TN/EAB) wrote:
> 
> The set_node_value/1 function is called from within a lists:foreach(),
> when you should rather use e.g. lists:foldl() with Nodes as an
> accumulator. That would eliminate all the get() and put() operations,
> as the updated Nodes variable is passed on to the next iteration.
> 
> set_node_value(Round, #config{proc_ids = Proc_ids, nodes = Nodes}) ->
>     lists:foldl(
>         fun(Id, Ns) ->
>             set_node_value(Round, Id, Nodes)
>         end, Nodes, ProcIds).

This is of course wrong, and a compiler warning would
have indicated the problem, had I bothered to actually
compile the proposed changes. The call to set_node_value/3
must be done using Ns rather than Nodes:

set_node_value(Round, #config{proc_ids = Proc_ids, nodes = Nodes}) ->
     lists:foldl(
         fun(Id, Ns) ->
             set_node_value(Round, Id, Ns)
         end, Nodes, ProcIds).

BR,
Ulf W



More information about the erlang-questions mailing list