A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

©André Santos, 1998-2008 Programação Funcional Laziness / Provas de Propriedades André Santos.

Apresentações semelhantes


Apresentação em tema: "©André Santos, 1998-2008 Programação Funcional Laziness / Provas de Propriedades André Santos."— Transcrição da apresentação:

1 ©André Santos, 1998-2008 Programação Funcional Laziness / Provas de Propriedades André Santos

2 Laziness Lazy evaluation –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

3 f :: Int -> Int -> Int f a b = a + 12 g :: Int -> Int g c = c + g c f 3 (g 0) = ? f (g 0) 3 = ? Laziness

4 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

5 Não faz avaliação duplicada f :: Int -> Int -> Int f a = a + a f (fat 20) = (fat 20) + (fat 20) Mas, na prática: = + (fat 20) Expressões representadas como grafos Laziness

6 Provas de propriedades Até então as provas eram realizadas apenas para valores definidos –Freqüentemente, precisa-se realizar provas levando em conta valores indefinidos ( undef ) f a b = a g c = c + g c f 1 undef = 1 g 1 = undef f undef 1 = undef g 5 = undef

7 Provas de propriedades Possibilidade de realizar provas sobre listas infinitas. Por exemplo: [1..]

8 As listas parciais undef, a 0 :undef, a 0 :a 1 :undef, etc. são aproximações da lista infinita [a 0,a 1,a 2,...,a n,...] Listas infinitas

9 ©André Santos, 1998-2002 Podemos afirmar que se uma propriedade se verifica para todas fp-lists, então a mesma se verifica para todas aproximações de listas infinitas

10 Provar P(x) para todas listas finitas ou parciais (construidas a partir de undef ) –caso base: P([]) e P(undef) –passo da indução: P(a:x) assumindo P(x) Provas de propriedades com indefinição

11 Exercício Prove que as seguintes propriedades são válidas para todas listas finitas ou parciais (fp-lists) sumList (double x) = 2 * sumList x x ++ (y ++ z) = (x ++ y) ++ z member (x++y) b = member x b || member y b

12 Exercício Verifique se a seguinte propriedade é válida para todas as fp-lists shunt (shunt x y) [] = shunt y x shunt :: [Int] -> [Int] -> [Int] shunt [] y = y (1) shunt (x:xs) y = shunt xs (x:y) (2)


Carregar ppt "©André Santos, 1998-2008 Programação Funcional Laziness / Provas de Propriedades André Santos."

Apresentações semelhantes


Anúncios Google