[Cascavel-pm] Somar elementos numericos de um array
Daniel Ruoso
daniel em ruoso.com
Terça Abril 10 10:26:46 PDT 2007
Ter, 2007-04-10 às 17:40 +0200, Luis Motta Campos escreveu:
> On Apr 10, 2007, at 3:27 PM, Daniel Ruoso wrote:
> > Hmmm... sei não mas acho que você não está sendo propriamente justo
> > nessa comparação... no caso do eval você tem uma função que não
> Reescreve, se você tiver tempo e saco, que eu quero entender o que
> você está argumentado.
> Por favor?
O código que o flávio mandou faz a mesma coisa que o código seguinte,
acho que vai ficar claro agora...
----
use strict;
use warnings;
use List::Util qw(sum);
use Benchmark qw(:all);
use Data::Dumper;
my @numbers = ( 1..10 );
my $sub_eval;
{
# na verdade isso deveria estar fora de qualquer forma...
local $" = "+";
# e o metodo pode ser ainda mais simples...
my $string = "sub {
@numbers;
}";
warn 'The code is: '.$string.$/;
$sub_eval = eval $string;
$Data::Dumper::Deparse = 1;
warn 'The sub is: '.Dumper($sub_eval);
}
cmpthese(
-3,
{
'map' => sub {
my $result;
map { $result += $_ } @numbers;
},
'for' => sub {
my $result;
$result += $_ for @numbers;
},
'sum' => sub {
my $result = sum(@numbers);
},
'eval' => $sub_eval,
}
);
__END__
E um detalhe... às vezes esquecemos de desligar o ajuste automático de
frequência do processador antes de rodar benchmarks. Isso pode gerar um
resultado completamente errado...
daniel
Mais detalhes sobre a lista de discussão Cascavel-pm