150 likes | 239 Views
Implementar Listas em Linguagem Funcional II. Projeto I - PLP Prof. Augusto Sampaio. Equipe : Aliny Figueirêdo Meira Ana Cristina Freitas César Danuza Ferreira Santana Neiva Mario Godoy Neto. Agenda. Contexto Projeto Proposto Comparação com outras linguagens BNF
E N D
Implementar Listas emLinguagem Funcional II Projeto I - PLP Prof. Augusto Sampaio Equipe : Aliny Figueirêdo Meira Ana Cristina Freitas César Danuza Ferreira Santana Neiva Mario Godoy Neto
Agenda • Contexto • Projeto Proposto • Comparação com outras linguagens • BNF • Classes Implementadas • Exemplos
Contexto • Linguagem Funcional • Mapeamento direto dos valores de entrada em valores de saída • Ausência de Estados • Linguagem Funcional 1 (LF1) e Linguagem Funcional 2 (LF2) • LF2 • Estende LF1 • Função passa a ser um valor • Função pode ser argumento ou resultado de uma outra expressão • Um programa é uma expressão • Não implementa Lista
Projeto Proposto • Estender a linguagem funcional II • Implementar Listas • Uma lista é uma seqüência de expressões; • Listas • Funções • Expressões unárias • Expressões binárias • Outros • Listas poderão conter valores abstratos e concretos; • Listas são homogêneas
Projeto Proposto • Representação de Listas: • [] -> Lista vazia • [e1,e2,...,en] - lista de n expressões • Implementação dos Operadores: • cons (e, L), adicionar o elemento “e” no início da lista “L”. • concat (L1, L2), concatena lista “L1” com a lista “L2”. • Head(L), retorna o primeiro elemento da lista “L”. • Tail(L), retorna a lista “L” sem o primeiro elemento.
LF2 cons concat head tail LISP cons cat car cdr Comparação com outras Linguagens • Haskell • : • union • Tails* *Difere o conceito
Exemplo Lisp cat([1,2], [3,4])= cons(1, cat([2], [3,4]))= cons(1, cons(2, cat([], [3,4])))= cons(1, cons(2, [3,4]))= cons(1, [2,3,4])= [1,2,3,4]
Exemplo Haskell • Concatenação union [1,2,3] [4,5,6] = [1,2,3,4,5,6] • “:” 1:(2:(3:(4:[]))) = [1,2,3,4] • Tails tails [1,3,5] = [[1,3,5],[3,5],[5],[]]
Programa ::= Expressao Expressao ::= Valor | ExpUnaria| ExpBinaria| ExpDeclaracao| Id| Aplicacao| IfThenElse Valor ::= ValorConcreto | ValorAbstrato ValorAbstrato ::= ValorFuncao ValorConcreto ::= ValorInteiro | ValorBooleano | ValorString | ValorLista ValorFuncao ::= "fn" Id LisId "." Expressão ValorLista ::= “[]” | “[” Expressão (“,” Expressão)* “]” ExpUnaria ::= "-" Expressao | "not" Expressao | "length" Expressao | “tail” Expressao | “head” Expressao ExpBinaria ::= Expressao "+" Expessao | Expressao "-" Expressao| Expressao "and" Expressao| Expressao "or" Expressao| Expressao "==" Expressao| Expressao "++" Expressao | Expressao “concat” Expressao | Expressao “cons” Expressao ExpDeclaracao ::= "let" DeclaracaoFuncional "in" Expressao DeclaracaoFuncional ::= DecVariavel | DecFuncao| DeclaracaoFuncional "," DeclaracaoFuncional DecVariavel ::= "var" Id "=" Expressao DecFuncao ::= "fun" ListId "=" Expressao ListId ::= Id | Id “,” ListId Aplicacao:= Expressao"(" ListExp ")" ListExp ::= Expressao | Expressão “,” ListExp BNF
Classes Implementadas • Novas classes: • ValorListaExpConcatListaExpConsExpTailExpHead TipoListaListaVaziaException
Classes Implementadas • Classes alteradas: • valorFuncao (funcional 2)Funcional2.jj (funcional 2)Tipo (expressao 1)ValorConcreto (expressao 2) Aplicacao (funcional 2) • http://www.cin.ufpe.br/~mgn
Exemplos ... Exemplo 1 let fun f xy = x + y, fun g ab = a*b in [f(1,2)] concat [f(5,2), f(1,1), g(2,2)] Exemplo 2 let fun f l = (if l == [] then [] else head l concat f(tail l)) in f ([[1,2],[3,4],[5,6]])
Exemplos ... • Exemplo 3 • let var z = 7, • var x = [1,2,3,4], • fun f w = 1 cons w • in f(x) • Exemplo 4 • let fun soma x = fn y . x + y in • head [soma(5), soma(6), soma(7)]
Referências • WATT, David A. Programming Language Concepts and Paradigms, 2004 • Haskell reference. Disponível em: http://www.zvon.org/other/haskell/Outputsyntax/index.html. Último Acesso: 20 de junho de 2007. • Rangel, J. L.Linguagens de Programação. Disponível em: http://www-di.inf.puc-rio.br/~rangel/lp.html. Último Acesso: 21 de junho de 2007.
Implementar Listas emLinguagem Funcional II Projeto I - PLP Prof. Augusto Sampaio Equipe : Aliny Figueirêdo Meira Ana Cristina Freitas César Danuza Ferreira Santana Neiva Mario Godoy Neto