Tail/Non tail recursion

Martin Sandiford <>
Fri Aug 29 00:59:41 CEST 2003


Hi Dominic,

My numbers seem to be more stable if I run erlang:garbage_collect()
before the timer:tc(...).

Linux, PIII 1GHz, R9C:

()6> perf:run().
plain: 1177035
map: 1640737
comprehension: 721675
ok


On Thu, 28 Aug 2003, WILLIAMS Dominic wrote:

> -module(square).
> -export([run/0,plain/1,map/1,comprehension/1]).
> 
> run() ->
> 	List = lists:seq(1,1000000),
> 	timer:start(),
> 	lists:foreach(
> 	  fun(Fun) ->
                          erlang:garbage_collect(), %% <- Inserted
> 			  {Time,_} = timer:tc(?MODULE,Fun,[List]),
> 			  io:fwrite("~w: ~w~n",[Fun,Time])
> 	  end,
> 	  [plain,map,comprehension]).
> 
> plain([H|T]) -> [H*H|plain(T)];
> plain([]) -> [].
> 
> map(Numbers) ->
> 	lists:map(fun(X)->X*X end,Numbers).
> 
> comprehension(Numbers)->
> 	[X*X||X<-Numbers].



More information about the erlang-questions mailing list