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

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

Projeto II - PLP Prof. Augusto Sampaio

Apresentações semelhantes


Apresentação em tema: "Projeto II - PLP Prof. Augusto Sampaio"— Transcrição da apresentação:

1 Projeto II - PLP Prof. Augusto Sampaio
Implementar Avaliação Preguiçosa e Casamento de Padrões em Linguagem Funcional II Projeto II - PLP Prof. Augusto Sampaio Equipe : Aliny Figueirêdo Meira Ana Cristina Freitas César Danuza Ferreira Santana Neiva Mario Godoy Neto

2 Agenda Projeto 2.1 – Avaliação Preguiçosa
Contexto Classes Implementadas Exemplos Projeto 2.2 – Casamento de Padrões Dificuldades Encontradas BNF Referências

3 Avaliação Preguiçosa ( Lazy Evaluation) Contexto
Definição : Avaliação dos argumentos de uma função somente no momento em que forem utilizados pela primeira vez. Aplica imediatamente a função ao argumento, adiando para mais tarde a avaliação desse argumento. Diferenças: Eager Lazy: (fun x -> x+1)(2+3) = (fun x -> x+1)5 = 5+1 = 6 (fun x -> x+1)(2+3) = (2+3)+1 = 5+1 = 6

4 Avaliação Preguiçosa ( Lazy Evaluation) Contexto
Linguagens que adotam a estratégia: Eager: Pascal, C, Java, OCaml Lazy: Haskell Problema que ocorreria no Eager não ocrre na Lazy: let var a = 1/0 in 2

5 Avaliação Preguiçosa ( Lazy Evaluation) Contexto
Poder da Avaliação Preguiçosa let fun loop x = loop(x), fun f x = 5 in f(loop(3)) (Na Eager não funcionaria - ficaria em loop )

6 Avaliação Preguiçosa Classe Implementadas/Alteradas
Interface AmbienteExecucaoLazy (nova) Classe ContextoExecucaoLazy (nova) Classe ID (alterada) Interface Expressao (alterada) Classe ExpDeclaracao (alterada) Classe StackHandler (alterada) Classe Aplicacao (alterada) Implementação no Projeto

7 Avaliação Preguiçosa Classe Implementadas/Alteradas
Interface AmbienteExecucaoLazy - Guarda mapeamento de ID em Expressões - classes que implementam EXPRESSAO recebem AmbienteExecuçãoLazy - AtualizaId(), altera a Expressao associada ao primeiro ID que case com o valor de idArg na pilha de escopos.

8 Avaliação Preguiçosa Classe Implementadas/Alteradas
Classe ContextoExecucaoLazy (nova) - public void atualizaId(Id idArg, expressao expId) Invoca o método updateId (StackHandler); - public Expressao get(Id idArg) Recupera a expressao mapeada no idArg; - public void map (Id idArg, Expressao expId) O ambiente guarda o mapeamento dos Identificadores (classe Id) nas Expressoes (Interface Expressao).

9 Avaliação Preguiçosa Classe Implementadas/Alteradas
Classe Id (cód) - Metodo AVALIAR: Avalia se o ID é valor ou expressão. Se for VALOR, retorna o valor. Se for EXPRESSAO, avalia e atualiza o ID (diferente da LF2). A expressão associada ao Id só é avaliada 1 vez.

10 Avaliação Preguiçosa Classe Implementadas/Alteradas
classe ExpDeclaracao (cód) - Metodos includeBinding - Metodos resolveBinding Tratam do mapeamento do Id como expressão e não mais como valor

11 Avaliação Preguiçosa Classe Implementadas/Alteradas
Classe StackHandler e Classe Aplicacao Problema da Recursividade Problemas nos identificadores Resolução: foi necessário buscar a próxima ocorrência do id , até alcançar o id com o valor associado do mesmo. Substituição do Id em todas as expressões do contexto (mesmo Map) Exemplo: let var n = 1 in let fun imprime l n = (if n == 6 then l else imprime ((n cons l), (n+1) )) in imprime ([], n)

12 Casamento de Padrão (Pattern Matching) Contexto
Definição É o ato de verificação da presença de um padrão em um conjunto de dados Exemplo let [fun fib 0 = 1 | fib 1 = 1 | fib n = fib (n - 1) + fib (n -2) ] in fib (6)

13 Casamento de Padrão Dificuldades Encontradas
Definição do escopo do Padrão Id e ValorConcreto Avaliação das condições Criação de um Ambiente de Execução local, cópia do ambiente original.

14 BNF A BNF foi estendida de forma a permitir que declarações de funções possam ser escritas da seguinte forma: fun f padrao_1 = exp_1,[ if cond_1] | ... | f padrao_n = exp_n, [if cond_n]

15 Casamento de Padrão Classe Implementadas/Alteradas
Classe DecFuncao (alterada) Classe Aplicacao (alterada) Classe ValorFuncaoPadrao (Criada) Classe Padrao (Criada) Classe ValorPadrao (Criada) Classe ExpMaior (Criada) Classe ExpMenor (Criada) Implementação no Projeto

16 Classe DecFuncao public DecFuncao(Id idFun, ValorFuncaoPadrao valorFuncP) { this.id = idFun; this.valorFuncP = valorFuncP; }

17 Casamento de Padrão Exemplos
[1] let var x = 1 in let [fun f 0 = 0 | f n = n + f(n - 1) , if x > 0] in f(2 + 3)

18 Agradecimento Marcus Vinícius

19 Referências WATT, David A. Programming Language Concepts and Paradigms, 2004 Haskell reference. Disponível em: Último Acesso: 20 de junho de 2007. Dias, A. Linguagens e Técnicas de Programação Avançadas. Disponível em: Último Acesso: 07 de agosto de 2007.


Carregar ppt "Projeto II - PLP Prof. Augusto Sampaio"

Apresentações semelhantes


Anúncios Google