9 paradigma funcional usando haskell

13
Paradigmas de Linguagens de Programação Prof. Péricles Miranda [email protected]

Transcript of 9 paradigma funcional usando haskell

Page 1: 9 paradigma funcional usando haskell

Paradigmas de Linguagens de Programação

Prof. Péricles [email protected]

Page 2: 9 paradigma funcional usando haskell

Paradigma Funcional usando Haskell

Page 3: 9 paradigma funcional usando haskell

Lazyness ou Avaliação preguiçosa

Page 4: 9 paradigma funcional usando haskell

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;

Page 5: 9 paradigma funcional usando haskell

Exemplo:

Programa em Haskell:f :: a -> b -> af x y = x

Avalia corretamente a expressão:f (2+3) (2/0)

Page 6: 9 paradigma funcional usando haskell

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.

Page 7: 9 paradigma funcional usando haskell

> 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?

Page 8: 9 paradigma funcional usando haskell

> 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?

Page 9: 9 paradigma funcional usando haskell

> 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?

Page 10: 9 paradigma funcional usando haskell

> 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?

Page 11: 9 paradigma funcional usando haskell

> 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?

Page 12: 9 paradigma funcional usando haskell

> 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?

Page 13: 9 paradigma funcional usando haskell

Paradigmas de Linguagens de Programação

Prof. Péricles [email protected]