Buscar

11 - Laziness

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 7 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Laziness	
  
Renata	
  Carvalho	
  
UNICAP	
  –	
  UNIVERSIDADE	
  CATÓLICA	
  DE	
  PERNAMBUCO	
   Renata	
  Carvalho	
  
Laziness	
  
•  Lazy	
  evalua*on	
  
•  Avaliação	
  de	
  uma	
  expressão	
  se	
  dá	
  apenas	
  quando	
  
seu	
  valor	
  é	
  necessário	
  
f	
  ::	
  Int	
  -­‐>	
  Int	
  -­‐>	
  Int	
  
f	
  a	
  b	
  =	
  a	
  +	
  b	
  
f	
  (9-­‐3)	
  (f	
  3	
  5) 	
  =	
  (9-­‐3)	
  +	
  (f	
  3	
  5)	
  
	
   	
   	
  =	
  6	
  +	
  8	
  
	
   	
   	
  =	
  14	
  
Laziness	
  
Chamadas	
  
de	
  Cauda	
  
Exercícios	
  
UNICAP	
  –	
  UNIVERSIDADE	
  CATÓLICA	
  DE	
  PERNAMBUCO	
   Renata	
  Carvalho	
  
Laziness	
  
f	
  ::	
  Int	
  -­‐>	
  Int	
  -­‐>	
  Int	
  
f	
  a	
  b	
  =	
  a	
  +	
  12	
  
	
  
g	
  ::	
  Int	
  -­‐>	
  Int	
  
g	
  0	
  =	
  0	
  
g	
  c	
  =	
  c	
  +	
  g	
  c	
  
	
  
	
  
f	
  3	
  (g	
  0)	
  =	
  ?	
  
f	
  (g	
  0)	
  3	
  =	
  ?	
   Laziness	
  
Chamadas	
  
de	
  Cauda	
  
Exercícios	
  
UNICAP	
  –	
  UNIVERSIDADE	
  CATÓLICA	
  DE	
  PERNAMBUCO	
   Renata	
  Carvalho	
  
Laziness	
  
•  Argumentos	
  não	
  precisam	
  ser	
  avaliados	
  por	
  
completo	
  
•  Apenas	
  o	
  necessário	
  para	
  a	
  execução	
  da	
  função	
  
f	
  ::	
  [Int]	
  -­‐>	
  [Int]	
  -­‐>	
  [Int]	
  
f	
  (a:as)	
  (b:bs)	
  =	
  a	
  +	
  b	
  
	
  
f	
  [1..]	
  [2..]	
  =	
  ?	
  
Laziness	
  
Chamadas	
  
de	
  Cauda	
  
Exercícios	
  
UNICAP	
  –	
  UNIVERSIDADE	
  CATÓLICA	
  DE	
  PERNAMBUCO	
   Renata	
  Carvalho	
  
Laziness	
  
•  Não	
  faz	
  avaliação	
  duplicada	
  
f	
  ::	
  Int	
  -­‐>	
  Int	
  -­‐>	
  Int	
  
f	
  a	
  b	
  =	
  a	
  +	
  b	
  
f	
  (9-­‐3)	
  (9-­‐3)	
   	
  =	
  (9-­‐3)	
  +	
  (9-­‐3)	
  
	
   	
   	
  = 	
  +	
  
	
   	
   	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  (9-­‐3)	
  
	
  
	
  
Expressões	
  representadas	
  como	
  grafos	
  (odmização)	
   Laziness	
  Chamadas	
  
de	
  Cauda	
  
Exercícios	
  
UNICAP	
  –	
  UNIVERSIDADE	
  CATÓLICA	
  DE	
  PERNAMBUCO	
   Renata	
  Carvalho	
  
Chamadas	
  de	
  Cauda	
  
•  Resultado	
  é	
  diretamente	
  “retornado”	
  por	
  
quem	
  faz	
  a	
  chamada	
  
fat	
  n	
  =	
  tailFat	
  n	
  1	
  
tailFat	
  0	
  x	
  =	
  x	
  
tailFat	
  n	
  x	
  =	
  tailFat	
  (n-­‐1)	
  (n*x)	
  
•  Tornam	
  desnecessário	
  empilhar	
  um	
  stack	
  
frame	
  por	
  chamada	
  
•  Evitam	
  estouros	
  de	
  pilha	
  
•  O	
  GHC	
  transforma	
  diversas	
  chamadas	
  
“comuns”	
  em	
  chamadas	
  de	
  cauda	
   Laziness	
  Chamadas	
  
de	
  Cauda	
  
Exercícios	
  
UNICAP	
  –	
  UNIVERSIDADE	
  CATÓLICA	
  DE	
  PERNAMBUCO	
   Renata	
  Carvalho	
  
Exercícios	
  
•  Implemente	
  uma	
  função	
  que	
  dado	
  um	
  valor	
  x,	
  
retorna	
  o	
  n-­‐ésimo	
  número	
  da	
  sequência	
  de	
  
Fibonacci	
  
•  Você	
  deve	
  usar	
  recursão	
  de	
  cauda	
  
•  Implemente	
  a	
  função	
  somaLista	
  usando	
  
recursão	
  de	
  cauda	
  
Laziness	
  
Chamadas	
  
de	
  Cauda	
  
Exercícios

Outros materiais