[SP-pm] Dúvida entre Scalar Context e List Context

Solli Honorio shonorio at gmail.com
Wed Mar 24 06:37:48 PDT 2010


Falar o que desta lista né ? Definitivamente a melhor do mundo :D ....


Solli M. Honório

Em 24 de março de 2010 13:14, Eden Cardim <edencardim em gmail.com> escreveu:

> 2010/3/23 Thiago Glauco <thiago em nerdsland.net>:
> > Aiai..
> >
> > Este é o tipo da coisa que é tão simples que fica difícil explicar...
> >
> > Quando o Perl foi criado, uma das preocupações do Larry era tornar a
> > linguagem parecida com a linguagem humana. Que é influenciada pelo
> contexto.
> > O contexto é algo que deve estar subentendido pelas duas partes do
> dialogo.
> >
> >
> > Exemplo de contexto: “Chovem canivetes.” ou “Ele me cortou com um
> canivete.”
> >
> > A palavra canivete varia conforme o contexto. E você sabe disso
> > intuitivamente, culturalmente. É impossível chover canivetes. Mas você
> sabe
> > que canivetes são perigosos. Então se alguém disser que choveram
> canivetes,
> > você associa o canivete a uma situação de chuva perigosa, logo muita
> chuva.
>
> Na verdade, o contexto do perl não ocorre em termos de cultura, isso
> seria impossível de automatizar. O contexto do perl ocorre em termos
> de gramática, sintaxe e semântica:
>
> "Diminua o grave da guitarra" vs "Ele sofreu um ferimento grave"
>
> "Diminua" é um verbo transitivo, o que exige que ele seja
> complementado por um objeto direto, nesse caso "grave", que indica que
> a palavra "grave" nesse caso é um substantivo, no caso uma das
> métricas de frequência sonora.
>
> "um ferimento" é um objeto indireto, que pode ser opcionalmente
> acompanhado de um complemento nominal, o que obriga "grave" a ser um
> adjetivo, nesse caso, de intensidade.
>
> Essa análise pode estar incorreta (não sou muito bom em lingua
> portuguesa, alguém que for pode me corrigir), mas o importante aqui é
> observar como o significante (o lexema "grave") permaneceu o mesmo,
> mas o significado mudou para satisfazer a gramática e suas regras de
> semântica.
>
> > Agora, vamos levar isto para o Perl.
> >
> > $myVar = 1;
> > $myOtherVar = 2;
> > $sum = $myVar + $myOtherVar;
>
> '+' é um operador binário de associação à esquerda. Operadores
> binários exigem que os seus dois operandos sejam do mesmo tipo (ou
> objetos sobrecarregados, que vou deixar de fora para simplificar). Por
> ser associativo à esquerda, o operador '+' permite que o operando da
> esquerda tem precedência na determinação do tipo. Pro caso específico
> do operador '+', os operandos devem ser números. Se o operando já não
> for um número (sim, o perl registra isso por trás das cenas), o perl
> vai criar uma *representação numérica* do seu valor para ser usado no
> lugar do operando. Observe que isso não é uma conversão, porque o
> valor original não é modificado. A construção do número varia a
> depender do operando: arrays são representados pela contagem dos
> elementos; strings que comecem com uma representação numérica aceita
> pelo perl são representados pelo número respectivo, as que não casam
> são representados por 0; referências são representadas pelo endereço
> de memória, etc.
> O mesmo vale pro operador '=', que também é um operador binário de
> associação à esquerda. O operador da esquerda sendo escalar, o
> operador da direita também deve ser um escalar, e o perl cria as
> representações adequadas para satisfazer a gramática.
>
> > E o compilador sabe, pelo contexto, que agora você quer tratar $sum como
> uma
> > string de texto, e não mais como um número...
>
> Na verdade, quem faz essa análise é o interpretador, o compilador
> apenas sabe, através da gramática, que um escalar qualquer pode estar
> aparecer em qualquer lugar onde um número poderia aparecer, e o
> interpretador vai saber se virar na hora de executar.
>
> > O compilador sabe que não pode colocar o array dentro de um Scalar. Mas o
> > compilador também sabe que você não é um idiota. Então ele pensa: "O que
> > existe em um array que pode ser guardado dentro de um escalar? Ah, já
> sei. O
> > número de elementos do array".
>
> Não, ele não pensa, ele usa uma "pesca". Inclusive, você pode
> sobrecarregar esse comportamento alterando a tabelinha que o perl usa
> como "pesca". ;)
>
> meus 0.02
>
> --
>   Eden Cardim       Need help with your Catalyst or DBIx::Class project?
>  Code Monkey                    http://www.shadowcat.co.uk/catalyst/
>  Shadowcat Systems Ltd.  Want a managed development or deployment platform?
> http://edenc.vox.com/            http://www.shadowcat.co.uk/servers/
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>
>


-- 
"o animal satisfeito dorme". - Guimarães Rosa
-------------- Pr?xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20100324/e16de42e/attachment-0001.html>


More information about the SaoPaulo-pm mailing list