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

Benilton Carvalho beniltoncarvalho em gmail.com
Domingo Fevereiro 26 16:33:22 BRT 2012


f2 <- function(x){
    stopifnot(x>=0)
    if(x<=1){
        1
    }else{
        x*f2(x-1)
    }
}


2012/2/26 Mauricio Cardeal <mcardeal2010 em gmail.com>:
> Benilton, por curiosidade testei os códigos e o primeiro funcionou certo,
> mas o segundo acusou erro:
>
>> factorial = function(x){
> +   stopifnot(x>=0)
> +   produto=1
> +   for (i in 1:x) produto = i* produto
> +   produto
> + }
>> factorial(3)
> [1] 6
>> f2 = function(x){
> +   stopifnot(x>=0)
> +   If(x<=1){
> Erro: '{' inesperado em:
> "  stopifnot(x>=0)
>   If(x<=1){"
>>     1
> [1] 1
>>   }else{
> Erro: '}' inesperado em "  }"
>>     x*f2(x-1)
> Erro: objeto 'x' não encontrado
>>   }
> Erro: '}' inesperado em "  }"
>> }
> Erro: '}' inesperado em "}"
>>
>
> Mauricio Cardeal
>
> UFBA
>
> Em 26 de fevereiro de 2012 14:37, Pedro Rafael
> <pedro.rafael.marinho em gmail.com> escreveu:
>
>> 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.
>> _______________________________________________
>> R-br mailing list
>> R-br em listas.c3sl.ufpr.br
>> 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
> R-br em listas.c3sl.ufpr.br
> 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.


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