9 paradigma funcional usando haskell

724 views
651 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
724
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

9 paradigma funcional usando haskell

  1. 1. Paradigmas de Linguagens de Programação<br />Prof. Péricles Miranda<br />periclesmiranda@gmail.com<br />
  2. 2. Paradigma Funcional usando Haskell<br />
  3. 3. LazynessouAvaliaçãopreguiçosa<br />
  4. 4. Lazyness<br />Linguagens de programação imperativas possuem o conceito de avaliação eagerou faminta:<br />Toda chamada de função é executada imediatamente;<br />Uma função só pode ser executada depois que todos os argumentos são avaliados.<br />Haskell é uma linguagem funcional que adota o conceito de Lazyness:<br />Quando uma chamada a função é encontrada no programa, esta chamada é guardada e somente será executada se o valor de retorno for necessário;<br />Os argumentos de funções são passados de forma não avaliada e serão executados a medida em que forem necessários;<br />
  5. 5. Exemplo:<br />Programa em Haskell:<br /> f :: a -> b -> a<br /> f x y = x<br />Avalia corretamente a expressão:<br /> f (2+3) (2/0)<br />
  6. 6. Lazyness<br />Vantagens:<br />Computações cujos valores não são necessários não são avaliados;<br />Em determinadas situações, programas que gerariam erros podem funcionar corretamente;<br />Novas técnicas de programação;<br />Desvantagem:<br />Maior custo computacional na execução das expressões.<br />
  7. 7. > head [(1+2),(3+1)]<br />O usuário pede para avaliar uma expressão.<br />Como Funciona a Lazyness?<br />
  8. 8. > E0<br />Como Funciona a Lazyness?<br />As chamadas as funções são armazenadas nas tabela de funções.<br />
  9. 9. > E0<br />Como Funciona a Lazyness?<br />E0 é o resultado da expressão e deve ser impresso, antes disso ele precisa ser executado.<br />
  10. 10. > E0<br />Como Funciona a Lazyness?<br />Mas:<br />head [a,b] = a<br />Portanto:<br />head E1 = E1<br />
  11. 11. > E2<br />Como Funciona a Lazyness?<br />E2 não está avaliado, deve ser avaliado.<br />1+2 => 3<br />
  12. 12. > E2<br />Como Funciona a Lazyness?<br />E2 está avaliado, e pode ser mostrado. <br />
  13. 13. Paradigmas de Linguagens de Programação<br />Prof. Péricles Miranda<br />periclesmiranda@gmail.com<br />

×