PLP – Varargs Adauto Trigueiro de A. Filho Emanoel Barreiros Helaine Lins - PowerPoint PPT Presentation

plp varargs adauto trigueiro de a filho emanoel barreiros helaine lins n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
PLP – Varargs Adauto Trigueiro de A. Filho Emanoel Barreiros Helaine Lins PowerPoint Presentation
Download Presentation
PLP – Varargs Adauto Trigueiro de A. Filho Emanoel Barreiros Helaine Lins

play fullscreen
1 / 13
PLP – Varargs Adauto Trigueiro de A. Filho Emanoel Barreiros Helaine Lins
64 Views
Download Presentation
steven-wall
Download Presentation

PLP – Varargs Adauto Trigueiro de A. Filho Emanoel Barreiros Helaine Lins

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. PLP – VarargsAdauto Trigueiro de A. Filho Emanoel BarreirosHelaine Lins

  2. O Problema [1] • Na linguagem funcional 3 o número de parâmetros passados a uma função é fixado no momento em que a mesma é criada e a sua chamada só pode ser feita com aquele número pré-determinado de parâmetros.

  3. O Problema [2] • Exemplo: • let fun soma a b = a + b in soma(1,2)

  4. O Problema [3] • A função anterior só recebe dois parâmetros. Se eu quiser uma que receba três, quatro, cinco, ...?

  5. A solução • Implementar o conceito de VARARGS na LF3 • Com VARARGS, uma função/método pode ser criada com um parâmetro que recebe vários argumentos.

  6. VARARGS [1] • Características: • Uma vez chamada a função/método, a lista de parâmetros passada é imutável. • O tamanho da lista não é definido. • O VARARGS deve ser o último parâmetro da função/método.

  7. Varargs [2] Exemplo de VARARGS em Java: public static double somar(double ... numeros ){ double soma = 0; for (double n: numeros){ soma += n; } return soma; }

  8. VARARGS em LF3 Usa a implementação de listas da LF3. Pode conter diferentes tipos. É identificado por “...” antes do parâmetro. Dentro do corpo da função, todas as operações com listas são permitidas.

  9. BNF Programa ::= Expressao Expressao ::= Valor | ExpUnaria | ExpBinaria | ExpDeclaracao | Id | Aplicacao | IfThenElse Valor ::= ValorConcreto | ValorAbstrato ValorAbstrato ::= ValorFuncao ValorConcreto ::= ValorInteiro | ValorBooleano | ValorString | ValorLista ValorFuncao ::= "fn" Id Id "." Expressao ExpUnaria ::= "-" Expressao | "not" Expressao | "length" Expressao | head(Expressao) | tail(Expressao) | size(Expressao) | ExpCompreensaoLista ExpCompreensaoLista ::= Expressao Gerador | Expressao Gerador Filtro Gerador ::= “for” Id “in” Expressao | “for” Id “in” Expressao [“,”] Gerador Filtro ::= “if” Expressao

  10. BNF ExpBinaria ::= Expressao "+" Expressao | Expressao "-" Expressao | Expressao "*" Expressao | Expressao ">" Expressao | Expressao "<" Expressao | Expressao "and" Expressao | Expressao "or" Expressao | Expressao "==" Expressao | Expressao "++" Expressao | Expressao ".." Expressao | Expressao ":" Expressao | Expressao "^^" Expressao ExpDeclaracao ::= "let" DeclaracaoFuncional "in" Expressao DeclaracaoFuncional ::= DecVariavel | DecFuncao | DeclaracaoFuncional "," DeclaracaoFuncional DecVariavel ::= "var" Id "=" Expressao DecFuncao ::= "fun" ParamList "=" Expressao ListId ::= Id | Id"," ListId ParamList ::= ListId | ListId"," "..."VarargsId | "..."VarargsId Aplicacao:= Expressao"(" ListExp ")” ListExp ::= Expressao | Expressao, ListExp

  11. Exemplos let fun somaUm a = a + 1 in let fun somaCinco b = b + 5 in let fun comp valor ...funcoes = (head(tail(funcoes)))((head(funcoes))(valor)) in comp(2,somaUm, somaCinco) Resultado: 8

  12. Exemplos let fun heads ...listas = [head( x) for x in listas] in heads([3,4,5],[1,7,8],[9,2,6]) Resultado: [3,1,9] let fun heads ...listas = [head( x) for x in listas] ^^ [tail( y) for y in listas] in heads([3,4,5],[1,7,8],[9,2,6]) Resultado: [3, 1, 9, [4, 5], [7, 8], [2, 6]]

  13. Dúvidas