
26 Fev
2012
26 Fev
'12
19:33
f2 <- function(x){ stopifnot(x>=0) if(x<=1){ 1 }else{ x*f2(x-1) } } 2012/2/26 Mauricio Cardeal <mcardeal2010@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@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@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@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@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.