
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-par... > 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-par...
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.