ps: o que eu disse sobre performance pode ser equivoco pois é um modulo XS. O PP esta aqui: http://cpan.uwinnipeg.ca/module/List::Util::PP
2011/5/29 Renato Santos <[email protected]> > Hmm, > > pelo que li do reduce do list::util, ele pode ser explicado assim: > sabendo que a array é ($a, $b, $c, ...) você "anda" sobre a lista pegando > sempre dois itens. > O valor do retorno é um scalar, que, é sempre o valor do ultimo item da > array apos o processamento, porem, o bloco não é executado quando há apenas > um item. > [parece mais simples usar/entender do que explicar ;p] > Por exemplo: > $undef = reduce {$a + $b} qw /1 2/; > e o bloco nao vai ser executado, pois $a foi associado com 1 e $b com 2. > > $seis = reduce {$a + $b} qw /1 2 3/; > internamento o loop é: > *loop 1:* $a = 1, $b = 2; # o resultado disso foi 3 > então ele pega o resultado do block e joga no *$a = 3* > *loop 2: *$a = 3, $b = 3 [mas este foi o valor "puxado" da lista] > é feito isso até o final da lista, depois disso, é retornado o valor do > calculo. > > Os casos de MAX/MIN são [IMHO] um pouco de desperdício de processamento, > pois há muito "sets" [ele vai associar o valor de $a várias vezes, mesmo > quando não precisava]. > > 2011/5/29 Stanislaw Pusep <[email protected]> > >> Falando em programação funcional e extrapolando o tópico, alguém tem uma >> boa referência focada em Perl? >> Mal consigo compreender reduce() do List::Util :( >> >> ABS() >> >> >> >> >> 2011/5/29 Tiago Peczenyj <[email protected]> >> >>> A melhor analogia a subrotina grep do perl é o comando grep no unix. >>> >>> $ grep 'condição' arquivo >>> >>> e o grep imprime na stdout as linhas do arquivo que satisfazem a >>> condição. >>> >>> Agora o map é engraçado pois ele não tem equivalente no mundo shell, >>> mas sim no mundo de programação funcional, acredito que ja foi muito >>> explorado aqui. >>> >>> 2011/5/29 Satoshi Hayazaki <[email protected]>: >>> > >>> > >>> > 2011/5/29 Renato Santos <[email protected]> >>> >> >>> >> O map gera uma nova lista com o resultado que você retornou >>> (percorrendo >>> >> cada item da[s] lista[s] que você passou) >>> >> e o grep retorna o conteudo original dependendo do resultando que você >>> >> retornou no código para cada um dos item[s]. >>> >> Look this: >>> >> @quatroZeros = map { 0 } qw / a b c d/; >>> >> @vazio = grep { 0 } qw / a b c d/; >>> >> ---------------------- >>> >> @quatroUm = map { 1 } qw / a b c d/; >>> >> @abc_e_d = grep { 1 } qw / a b c d/; >>> >> >>> > >>> > >>> > Adorei esse exemplo. Eu que não conhecia nenhum dos dois muito bem (só >>> de >>> > ouvir falar, mas nunca tinha usado) consegui entender perfeitamente com >>> > isso. RenatoCRON++ >>> > =begin disclaimer >>> > Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >>> > SaoPaulo-pm mailing list: [email protected] >>> > L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >>> > =end disclaimer >>> > >>> > >>> >>> >>> >>> -- >>> Tiago B. Peczenyj >>> Linux User #405772 >>> >>> http://pacman.blog.br >>> =begin disclaimer >>> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >>> SaoPaulo-pm mailing list: [email protected] >>> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >>> =end disclaimer >>> >> >> >> =begin disclaimer >> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ >> SaoPaulo-pm mailing list: [email protected] >> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> >> =end disclaimer >> >> > > > -- > Renato Santos > http://www.renatocron.com/blog/ > -- Renato Santos http://www.renatocron.com/blog/
=begin disclaimer Sao Paulo Perl Mongers: http://sao-paulo.pm.org/ SaoPaulo-pm mailing list: [email protected] L<http://mail.pm.org/mailman/listinfo/saopaulo-pm> =end disclaimer
