Implementar Listas em Linguagem Funcional II Projeto I

  • Slides: 15
Download presentation
Implementar Listas em Linguagem Funcional II Projeto I - PLP Prof. Augusto Sampaio Equipe

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 1

Agenda Contexto ¡ Projeto Proposto ¡ Comparação com outras linguagens ¡ BNF ¡ Classes

Agenda Contexto ¡ Projeto Proposto ¡ Comparação com outras linguagens ¡ BNF ¡ Classes Implementadas ¡ Exemplos ¡ 2

Contexto ¡ Linguagem Funcional l ¡ Mapeamento direto dos valores de entrada em valores

Contexto ¡ Linguagem Funcional l ¡ Mapeamento direto dos valores de entrada em valores de saída Ausência de Estados Linguagem Funcional 1 (LF 1) e Linguagem Funcional 2 (LF 2) LF 2 l l l Estende LF 1 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 3

Projeto Proposto ¡ Estender a linguagem funcional II l Implementar Listas ¡ Uma lista

Projeto Proposto ¡ Estender a linguagem funcional II l Implementar Listas ¡ Uma lista é uma seqüência de expressões; l l l 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 ¡ 4

Projeto Proposto l Representação de Listas: [] -> Lista vazia ¡ [e 1, e

Projeto Proposto l Representação de Listas: [] -> Lista vazia ¡ [e 1, e 2, . . . , en] - lista de n expressões ¡ l Implementação dos Operadores: cons (e, L), adicionar o elemento “e” no início da lista “L”. ¡ concat (L 1, L 2), concatena lista “L 1” com a lista “L 2”. ¡ Head(L), retorna o primeiro elemento da lista “L”. ¡ Tail(L), retorna a lista “L” sem o primeiro elemento. ¡ 5

Comparação com outras Linguagens ¡ LF 2 l l cons concat head tail ¡

Comparação com outras Linguagens ¡ LF 2 l l cons concat head tail ¡ Haskell l l : union ¡ LISP l l Tails* l cons cat car cdr *Difere o conceito 6

Exemplo Lisp cat([1, 2], [3, 4])= cons(1, cat([2], [3, 4]))= cons(1, cons(2, cat([], [3,

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] 7

Exemplo Haskell ¡ Concatenação union [1, 2, 3] [4, 5, 6] = [1, 2,

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], [5], []] 8

Programa : : = Expressao : : = Valor | Exp. Unaria | Exp.

Programa : : = Expressao : : = Valor | Exp. Unaria | Exp. Binaria | Exp. Declaracao | Id | Aplicacao | If. Then. Else Valor : : = Valor. Concreto | Valor. Abstrato : : = Valor. Funcao Valor. Concreto : : = Valor. Inteiro | Valor. Booleano | Valor. String | Valor. Lista Valor. Funcao : : = "fn" Id Lis. Id ". " Expressão Valor. Lista : : = “[]” | “[” Expressão (“, ” Expressão)* “]” Exp. Unaria : : = "-" Expressao | "not" Expressao | "length" Expressao | “tail” Expressao | “head” Expressao Exp. Binaria : : = Expressao "+" Expessao | Expressao "-" Expressao | Expressao "and" Expressao | Expressao "or" Expressao | Expressao "==" Expressao | Expressao "++" Expressao | Expressao “concat” Expressao | Expressao “cons” Expressao Exp. Declaracao : : = "let" Declaracao. Funcional "in" Expressao Declaracao. Funcional : : = Dec. Variavel | Dec. Funcao | Declaracao. Funcional ", " Declaracao. Funcional Dec. Variavel : : = "var" Id "=" Expressao Dec. Funcao : : = "fun" List. Id "=" Expressao List. Id : : = Id | Id “, ” List. Id Aplicacao: = Expressao"(" List. Exp ")" List. Exp : : = Expressao | Expressão “, ” List. Exp BNF 9

Classes Implementadas ¡ Novas classes: l Valor. Lista Exp. Concat. Lista Exp. Cons Exp.

Classes Implementadas ¡ Novas classes: l Valor. Lista Exp. Concat. Lista Exp. Cons Exp. Tail Exp. Head Tipo. Lista. Vazia. Exception 10

Classes Implementadas ¡ Classes alteradas: l ¡ valor. Funcao (funcional 2) Funcional 2. jj

Classes Implementadas ¡ Classes alteradas: l ¡ valor. Funcao (funcional 2) Funcional 2. jj (funcional 2) Tipo (expressao 1) Valor. Concreto (expressao 2) Aplicacao (funcional 2) http: //www. cin. ufpe. br/~mgn 11

Exemplos. . . Exemplo 1 let fun f xy = x + y, fun

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]]) 12

Exemplos. . . Exemplo 3 let var z = 7, var x = [1,

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)] 13

Referências ¡ ¡ ¡ WATT, David A. Programming Language Concepts and Paradigms, 2004 Haskell

Referências ¡ ¡ ¡ WATT, David A. Programming Language Concepts and Paradigms, 2004 Haskell reference. Disponível em: http: //www. zvon. org/other/haskell/Outputsynt ax/index. html. Último Acesso: 20 de junho de 2007. Rangel, J. L. Linguagens de Programação. Disponível em: http: //www-di. inf. pucrio. br/~rangel/lp. html. Último Acesso: 21 de junho de 2007. 14

Implementar Listas em Linguagem Funcional II Projeto I - PLP Prof. Augusto Sampaio Equipe

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 15