4. Lazyness Linguagens de programação imperativas possuem o conceito de avaliação eagerou 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;
5. Exemplo: Programa em Haskell: f :: a -> b -> a f x y = x Avalia corretamente a expressão: f (2+3) (2/0)
6. 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.
7. > head [(1+2),(3+1)] O usuário pede para avaliar uma expressão. Como Funciona a Lazyness?
8. > E0 Como Funciona a Lazyness? As chamadas as funções são armazenadas nas tabela de funções.
9. > E0 Como Funciona a Lazyness? E0 é o resultado da expressão e deve ser impresso, antes disso ele precisa ser executado.
10. > E0 Como Funciona a Lazyness? Mas: head [a,b] = a Portanto: head E1 = E1
11. > E2 Como Funciona a Lazyness? E2 não está avaliado, deve ser avaliado. 1+2 => 3
12. > E2 Como Funciona a Lazyness? E2 está avaliado, e pode ser mostrado.