Erlang shows its slow face!
Gilberto Carmenate García
co7eb@REDACTED
Sat Nov 13 08:37:08 CET 2010
Hi all!
I have been doing tests to Erlang I found this funny stuff that makes
Pythagorean Triplets
pythag(N) ->
[ {A,B,C} ||
A <- lists:seq(1,N),
B <- lists:seq(1,N),
C <- lists:seq(1,N),
A+B+C =< N,
A*A+B*B =:= C*C].
I tested it agains an implementation I made in C# so, and takes 14
secounds in my pc to do with 300 numbers in Erlang however in c# is just
a secound, even when C# runs under VM too.
So I did all possible ways for me to implement differents manners in
Erlang looking for speed and all is the same, listed as follows:
So my question is, there are any way to do that even more fast, why 3
nestes fors structs in C# are more effients that lists:foldr or
lists:foreach in Erlang.
%% FORMA 1
py1(Max)->
L = lists:seq(1, Max),
lists:foldr(
fun(A, Acc3)->
lists:foldr(
fun(B, Acc2)->
lists:foldr(
fun(C, Acc)->
case ((A*A + B*B =:= C*C) andalso (A+B+C =<
Max)) of
true->
[{A,B,C}|Acc];
false->
Acc
end
end
, Acc2, L)
end
, Acc3, L)
end
, [], L).
%% FORMA 2
py2(Max)->
fora(1, [], Max).
fora(A, Acc, Max)->
Acc1 = forb(A,1, Acc, Max),
case A < Max of
true->
fora(A+1, Acc1, Max);
false->
Acc1
end.
forb(A,B, Acc, Max)->
Acc1 = forc(A,B,1, Acc, Max),
case B < Max of
true->
forb(A,B+1, Acc1, Max);
false->
Acc1
end.
forc(A,B,C, Acc, Max)->
Acc1 = case (A*A + B*B =:= C*C) andalso (A+B+C =< Max) of
true->
[{A,B,C}|Acc];
_->
Acc
end,
case C < Max of
true->
forc(A,B,C+1, Acc1, Max);
false->
Acc1
end.
%% FORMA 3.
py3(Max)->
[{A,B,C} ||
A <-lists:seq(1, Max),
B <-lists:seq(1, Max),
C <-lists:seq(1, Max),
A*A + B*B =:= C*C,
A+B+C =< Max].
=======================================================================
Este mensaje ha sido enviado mediante el servicio de correo electronico que ofrece la Federacion de Radioaficionados de Cuba a sus miembros para respaldar el cumplimiento de los objetivos de la organizacion y su politica informativa. La persona que envia este correo asume el compromiso de usar el servicio a tales fines y cumplir con las regulaciones establecidas.
More information about the erlang-questions
mailing list