[SP-pm] grep e map

Renato Santos renato.cron at gmail.com
Sun May 29 19:20:54 PDT 2011


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 <creaktive at gmail.com>

> 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 <tiago.peczenyj at gmail.com>
>
>> 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 <heavennevertouchedearthlyface at gmail.com>:
>> >
>> >
>> > 2011/5/29 Renato Santos <renato.cron at gmail.com>
>> >>
>> >> 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: SaoPaulo-pm at pm.org
>> >  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: SaoPaulo-pm at pm.org
>>  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: SaoPaulo-pm at pm.org
>  L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
>


-- 
Renato Santos
http://www.renatocron.com/blog/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20110529/e2249d17/attachment.html>


More information about the SaoPaulo-pm mailing list