9 paradigma funcional usando haskell
-
Upload
pericles-miranda -
Category
Documents
-
view
570 -
download
2
Transcript of 9 paradigma funcional usando haskell
Paradigmas de Linguagens de Programação
Prof. Péricles [email protected]
Paradigma Funcional usando Haskell
Lazyness ou Avaliação preguiçosa
Lazyness• Linguagens de programação imperativas possuem o conceito
de avaliação eager ou faminta:– Toda chamada de função é executada imediatamente;– Uma função só pode ser executada depois que todos os argumentos
são avaliados.
• Haskell é uma linguagem funcional que adota o conceito de Lazyness:– Quando uma chamada a função é encontrada no programa, esta
chamada é guardada e somente será executada se o valor de retorno for necessário;
– Os argumentos de funções são passados de forma não avaliada e serão executados a medida em que forem necessários;
Exemplo:
Programa em Haskell:f :: a -> b -> af x y = x
Avalia corretamente a expressão:f (2+3) (2/0)
Lazyness
• Vantagens:– Computações cujos valores não são necessários não
são avaliados;– Em determinadas situações, programas que gerariam
erros podem funcionar corretamente;– Novas técnicas de programação;
• Desvantagem:– Maior custo computacional na execução das
expressões.
> head [(1+2),(3+1)] Tabela de Funções
E0
E1
E2
E3
E4
…
O usuário pede para avaliar uma expressão.
Como Funciona a Lazyness?
> E0 Tabela de Funções
E0 head E1
E1 [E2,E3]
E2 (1+2)
E3 (3+1)
E4
…
As chamadas as funções são armazenadas nas tabela de funções.
Como Funciona a Lazyness?
> E0 Tabela de Funções
E0 head E1
E1 [E2,E3]
E2 (1+2)
E3 (3+1)
E4
…
E0 é o resultado da expressão e deve ser impresso, antes disso ele precisa ser executado.
Como Funciona a Lazyness?
> E0 Tabela de Funções
E0 head E1
E1 [E2,E3]
E2 (1+2)
E3 (3+1)
E4
…
Mas:
head [a,b] = a
Portanto:
head E1 = E1
Como Funciona a Lazyness?
> E2 Tabela de Funções
E0 E2
E1 [E2,E3]
E2 (1+2)
E3 (3+1)
E4
…
E2 não está avaliado, deve ser avaliado.
1+2 => 3
Como Funciona a Lazyness?
> E2 Tabela de Funções
E0 E2
E1 [E2,E3]
E2 3
E3 (3+1)
E4
…
E2 está avaliado, e pode ser mostrado.
Como Funciona a Lazyness?
Paradigmas de Linguagens de Programação
Prof. Péricles [email protected]