[R-br] [Dúvida] Uso de linguagem funcional para estatística.

Pedro Rafael pedro.rafael.marinho em gmail.com
Domingo Fevereiro 26 14:37:56 BRT 2012


Em linguagens de programação imperativas você pensa nas coisas
seguindo uma sequência computacional de tarefas sendo executadas,
embora durante possam mudar de estado. Por exemplo, você define uma
variável como 5 e então faz alguma coisa e em seguida a define como
sendo alguma outra coisa qualquer. Você possui o controle do fluxo da
estrutura podendo fazer uma determinada ação diversas vezes. Na
programação puramente funcional você não diz para o computador o que
fazer, porém você diz muitas vezes em qual coisa está. O fatorial de
um número é o produto de todos os números sobre 1 deste número, a soma
de uma lista de números é o primeiro mais a soma de todos os outros
números e assim por diante. Você expressa isto na forma de funções.
Você também não pode definir uma variável como sendo alguma coisa e em
seguida defini-lá como sendo alguma outra coisa mais tarde. Se você
dizer a ela que é 5, você não poderá dizer que é outra coisa mais
tarde porque você já disse que era 5.  Então, em linguagens puramente
funcionais, uma função não tem efeitos colaterais. A única coisa que
podemos fazer com uma função é calcular algo e devolvê-lo como um
resultado. Inicialmente, eu vi isto como uma limitação porém isto
realmente tem algumas consequências interessantes: se a função é
chamada duas vezes com os mesmos parâmetros, isto garantirá o retorno
de um mesmo resultado. Isto se chama transparência referencial e não
só permite que o compilador raciocine sobre o comportamento do
programa, como também permite que você deduza facilmente (e até mesmo
prove) que uma função está correta e, em seguida, construa funções
mais complexas juntando diversas funções simples por colagem.

A sequência de Fibonacci em Haskell é implementada assim:

fib 0 = 0
fib 1 = 1
fib n = fib (n - 2) + fib (n - 1)

Fatorial em Haskell:

fatorial 0 = 1
fatorial n = n * fatorial (n - 1)

Hoje o software Mathematica trabalha com linguagem funcional apesar de
ainda permitir outros paradigmas de programação.



Em 26 de fevereiro de 2012 12:58, beniltoncarvalho [via R-br]
<ml-node+s2285057n4422365h92 em n4.nabble.com> escreveu:
> De fato, FH, nao e' um conceito trivial de entender.
>
> A estoria toda gira em torno do fato de que "nosso metodo usual de
> programacao" depende basicamente em mudar dados de alguma forma... Por
> exemplo, no exemplo que dei, o primeiro caso sempre muda o acumulador
> 'produto'. Em funcional, os dados sao vistos como algo imutavel e,
> dai', loops como o for() que usei inicialmente sao substituidos por
> recursoes de *funcoes* (dai' o termo funcional - a unidade basica na
> programacao sao as funcoes e nao os dados).
>
> Eu estou bem desatualizado nisso, talvez o Pedro possa ser mais
> preciso nas definicoes. Mas acho que (pelo menos a maioria de)
> linguagens puramente funcionais tenham natureza de linguagens
> interpretadas, mas podem ser sempre compiladas em algum nivel (por
> exemplo, via byte-compilers).
>
> b
>
> 2012/2/26 FHRB Toledo <[hidden email]>:
>
>> Benilton,
>>
>> Entendi em partes sua argumentação... !
>>
>> Li seu código, mas também não testei.
>>
>> Minha pergunta veio apenas no gancho da explicação do Pedro sobre as
>> linguagens funcionais, não entendo o suficiente de programação, sou
>> apenas curioso, vi no texto dele falando de linguagens como lisp que
>> me classificaram como "interpretada", por isso, por "reflexo"
>> perguntei se linguagem funcional era sinônimo de linguagem
>> interpretada, talvés tenha sido mal interpretado!
>>
>> OBS: ainda continuo com a dúvida e "um pouco" a deriva com sua explicação.
>>
>> abraço,
>> FH
>>
>> 2012/2/25 Benilton Carvalho <[hidden email]>:
>>> FH, a maioria de programas tem dados como argumento. Prof funcionais tem
>>> funções como argumentos. Por exemplo, em R:
>>>
>>> factorial = funtion(x){
>>> stopifnot(x>=0)
>>> produto=1
>>>  for (i in1:x) produto = i* produto
>>> produto
>>> }
>>>
>>> Vs
>>>
>>> f2 = funtion(x){
>>> stopifnot(x>=0)
>>> If(x<=1){
>>> 1
>>> }else{
>>> x*f2(x-1)
>>> }
>>> }
>>>
>>> Resumindo, se em  r vc pode fazer ambos, tem mesmo pq se preocupar?
>>>
>>> b
>>>
>>> Ps: códigos não testados
>>>
>>> On Sunday, 26 February 2012, FHRB Toledo wrote:
>>>>
>>>> Pedro,
>>>>
>>>> Aproveitando o gancho da explicação:
>>>>
>>>> Seria por acaso linguegem funcional sinônimo de linguegem interpretada?
>>>>
>>>> att,
>>>> FH
>>>>
>>>> 2012/2/25 Pedro Rafael <[hidden email]>:
>>>> > "Em ciência da computação, programação funcional é um paradigma de
>>>> > programação que trata a computação como uma avaliação de funções
>>>> > matemáticas e que evita estados ou dados mutáveis. Ela enfatiza a
>>>> > aplicação de funções, em contraste da programação imperativa, que
>>>> > enfatiza mudanças no estado do programa.
>>>> >
>>>> > Uma função, neste sentido, pode ter ou não ter parâmetros e um simples
>>>> > valor de retorno. Os parâmetros são os valores de entrada da função, e
>>>> > o valor de retorno é o resultado da função. A definição de uma função
>>>> > descreve como a função será avaliada em termos de outras funções. Por
>>>> > exemplo, a função f(x) = x2 + 2 é definida em termos de funções de
>>>> > exponenciação e adição. Do mesmo modo, a linguagem deve oferecer
>>>> > funções básicas que não requerem definições adicionais.
>>>> >
>>>> > Linguagens de programação funcionais, especialmente as puramente
>>>> > funcionais, tem sido mais usadas academicamente que no desenvolvimento
>>>> > comercial de software. Entretanto, algumas linguagens notáveis usadas
>>>> > na indústria e no comércio incluem Erlang (aplicações
>>>> > concorrentes)[2], R (estatística), Mathematica (matemática
>>>> > simbólica)[3] J, K (análise financeira) e XSLT.[4][5]Importantes
>>>> > influências na programação funcional foram o cálculo lambda, as
>>>> > linguagens de programação APL e Lisp, e mais recentemente ML, Haskell,
>>>> > OCaml e F#."
>>>> >
>>>> > Um bom link sobre a linguagem funcional que mais me chama a atenção
>>>> > (Haskell): http://haskell.tailorfontela.com.br/chapters
>>>> >
>>>> > Em 25 de fevereiro de 2012 20:03, Gilbert Queiroz [via R-br]
>>>> > <[hidden email]> escreveu:
>>>> >>
>>>> >> linguagem de programação funcional? O q é isso?????
>>>> >>
>>>> >>
>>>> >> ________________________________
>>>> >> De: Pedro Rafael <[hidden email]>
>>>> >> Para: [hidden email]
>>>> >> Enviadas: Sábado, 25 de Fevereiro de 2012 20:20
>>>> >> Assunto: [R-br] [Dúvida] Uso de linguagem funcional para estatística.
>>>> >>
>>>> >> Alguem aqui domina alguma linguagem de programação funcional? Existe
>>>> >> alguma vantagem de quem é da estatística ou matemática também
>>>> >> aprender
>>>> >> profundamente alguma linguagem funcional como é o caso de Haskell?
>>>> >> Atualmente tudo que preciso consigo em R e C mas ultimamente venho
>>>> >> lendo
>>>> >> sobre linguagem funcional e cálculo lambda e me parece bem
>>>> >> interessante para
>>>> >> quem trabalha matemática....
>>>> >>
>>>> >> --
>>>> >> Saudações,
>>>> >> Pedro Rafael Diniz Marinho.
>>>> >> Estatístico - Secretaria de Estado da Saúde - PB.
>>>> >>
>>>> >>
>>>> >>
>>>> >> _______________________________________________
>>>> >> R-br mailing list
>>>> >> [hidden email]
>>>> >> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>>>> >> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
>>>> >> código mínimo reproduzível.
>>>> >>
>>>> >>
>>>> >> _______________________________________________
>>>> >> R-br mailing list
>>>> >> [hidden email]
>>>> >> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>>>> >> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
>>>> >> código mínimo reproduzível.
>>>> >>
>>>> >> ________________________________
>>>> >> If you reply to this email, your message will be added to the
>>>> >> discussion below:
>>>> >>
>>>> >>
>>>> >> http://r-br.2285057.n4.nabble.com/R-br-Duvida-Uso-de-linguagem-funcional-para-estatistica-tp4421166p4421229.html
>>>> >> To unsubscribe from R-br, click here.
>>>> >> NAML
>>>> >
>>>> >
>>>> >
>>>> >
>>>> > --
>>>> > Saudações,
>>>> > Pedro Rafael Diniz Marinho.
>>>> > Estatístico - Secretaria de Estado da Saúde - PB.
>>>> > _______________________________________________
>>>> > R-br mailing list
>>>> >
>>>
>>>
>>> _______________________________________________
>>> R-br mailing list
>>> [hidden email]
>>> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>>> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
>>> código
>>> mínimo reproduzível.
>> _______________________________________________
>> R-br mailing list
>> [hidden email]
>> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
>> código mínimo reproduzível.
> _______________________________________________
> R-br mailing list
> [hidden email]
> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código
> mínimo reproduzível.
>
>
> ________________________________
> If you reply to this email, your message will be added to the discussion
> below:
> http://r-br.2285057.n4.nabble.com/R-br-Duvida-Uso-de-linguagem-funcional-para-estatistica-tp4421166p4422365.html
> To unsubscribe from R-br, click here.
> NAML



-- 
Saudações,
Pedro Rafael Diniz Marinho.
Estatístico - Secretaria de Estado da Saúde - PB.


Mais detalhes sobre a lista de discussão R-br