[Cascavel-pm] Somar elementos numericos de um array

Luis Motta Campos luismottacampos em yahoo.co.uk
Terça Abril 10 00:12:41 PDT 2007


On Apr 9, 2007, at 4:57 PM, Patty Silva wrote:
> Pessoal.. tem como eu somar elementos numericos de um array?
> ex:
> @teste=(1,2,4,1,3,1,1,1,4,56,7,8,9);
> somar=1+2+4+1+3....
> sem precisar do for?

   Patty

   O pessoal sugeriu que você usasse outros métodos, que eu considero  
equivalentes ao FOR: MAP, List::Util e outros. Aqui tem uma sugestão  
genérica, que é complicada de ler, não serve para código de produção  
mas é educativa.

   Conceito: você está precisando somar uma lista de números.
   Solução sugerida: construa um programa que faça isso e rode o  
programa, colete o resultado no final.
   Implementação:

   #!/usr/bin/perl
   use strict;
   use warnings;
   use English; # Para poder dizer $LIST_SEPARATOR ao invés de $"
   my @numeros = 1..100;
   my $soma;
   local $LIST_SEPARATOR = '+'; # se você não usar "English", use  
($"), que é a mesma coisa.
   my $programa = qq{\$soma = @numeros};
   eval $programa;
   if( $@ ) { # erro no programa?
     print STDERR "$@";
   } else {
     print $soma, $/;
   }
   __END__

   Como você pode ver, meu programa não usa loops (bom, o CORE do  
Perl usa, mas isto é o mais perto que se pode chegar da ausência de  
loops...)

   Alguém pode por favor incluir a minha sugestão nos benchmarks?
   Putamplexos!
--
Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer,
Perl fanatic evangelist, and amateur {cook, photographer}




Mais detalhes sobre a lista de discussão Cascavel-pm