Listas em Prolog

14.686 visualizações

Publicada em

Publicada em: Tecnologia
0 comentários
5 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
14.686
No SlideShare
0
A partir de incorporações
0
Número de incorporações
6
Ações
Compartilhamentos
0
Downloads
240
Comentários
0
Gostaram
5
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Listas em Prolog

  1. 1. Universidade Federal de Campina Grande Centro de Engenharia Elétrica e Informática Departamento de Sistemas e Computação Disciplina: Lógica Matemática – 2009.2Listas em Prolog Grupo: Delano Oliveira Izabela Vanessa Natã Venâncio Savyo Igor
  2. 2. Introduçãon  Representação interna recursivan  Sequência de qualquer número de itensn  Aparência externa da lista: n  [brasil, uruguai, paraguai, argentina]n  Uma lista pode ser mista: n  X = [1,[a,b],f(5),4,f(b),[6,t],7]. 2
  3. 3. Representação e Construçãon  Representação: n  Lista vazia => apenas o átomo n  Lista não-vazia => cabeça + corpo n  No exemplo: cabeça => brasil corpo => [uruguai, paraguai, argentina]n  A cabeça de uma lista pode ser qualquer objeto de Prolog, mas o corpo obrigatoriamente deve ser uma lista. 3
  4. 4. Representação e Construçãon  A cabeça e o corpo são combinados em uma estrutura por meio do functor . n  Exemplo 1: n  ?- Lista = .(cabeca, corpo). Lista = [cabeca|corpo]. n  Exemplo 2: n  ?- Lista = .(brasil, .(uruguai, .(argentina, .(paraguai, [])))). Lista = [brasil, uruguai, paraguai, argentina]. 4
  5. 5. Representação e Construçãon  Em Prolog, Listas são na realidade árvores. Veja na figura abaixo, como ficaria a árvore da lista do Exemplo 2. 5
  6. 6. Representação e Construção gerarn  functor . confusõesn  Notação simplificada: sequência de itens separados por vírgulas e incluídos entre colchetes. 6
  7. 7. Representação e Construçãon  Exemplo1: n  ?- Lista = [cabeca, corpo]. Lista = [cabeca, corpo].n  Exemplo2: n  ?- Lista = [brasil, uruguai, paraguai, argentina]. Lista = [brasil, uruguai, paraguai, argentina].n  Num programa em Prolog, podemos escrever o seguinte fato para criar uma lista: n  const(X,Y,[X|Y]). 7
  8. 8. Testesn  No SWI-Prolog teste os seguintes casos: n  ?- [X|Y] = [a,b,c,d]. n  ?- [X|[Y|Z]] = [a,b,c,d]. n  ?- [X,Y,Z] = [a,b,c,d]. n  ?- [X,Y|Z] = [a,b,c,d]. n  ?- [X,Y,Z|_] = [1,3,5,7,9,11,13]. 8
  9. 9. Testesn  No SWI-Prolog faça: n  ?- assert(const(X,Y,[X|Y])).n  Agora, teste os seguintes casos: n  const(a,b,Z). n  const(a, [b,c], Z). n  const(a, [], Z). n  const(a, X, [a,b,c]). n  const([a,b,c], [b,c], Z). 9
  10. 10. Operações sobre listasn  Ocorrência de elementos numa lista member(X, L) True True False 10
  11. 11. Operações sobre listasn  Ocorrência de elementos numa lista Usando variáveis anônimas 11
  12. 12. Operações sobre listasn  Concatenação de listas True 12
  13. 13. Operações sobre listas n  Concatenação de listasExemplos no SWI-Prolog: 13
  14. 14. Operações sobre listas n  Concatenação de listasOutras aplicações: Sucessor e antecessor de um item na lista Apagar os elementos a partir do item na lista 14
  15. 15. Operações sobre listasn  Remoção de elementos de uma lista select(termo, lista, lista1) 15
  16. 16. Operações sobre listas n  Remoção de elementos de uma listaExemplos no SWI-Prolog: 16
  17. 17. Operações sobre listasn  Inversão de listas reverse(List1, List2) 17
  18. 18. Operações sobre listasn  Inversão de listas Mais tradicional Mais eficiente 18
  19. 19. Operações sobre listasn  Sublistas sublist(List1, List2) True False 19
  20. 20. Operações sobre listasn  Sublistas 20
  21. 21. Operações sobre listasl  Tamanho de uma Listal  length([1, a, b], X).l  Algoritmo para encontrar o tamanho de uma lista. Exemplos no SWI-Prolog: 21
  22. 22. Operações sobre listasl  Algoritmo para encontrar o enésimo elemento de uma lista.Exemplos no SWI-Prolog: 22
  23. 23. Operações sobre listasl  Lista para a teoria dos conjuntos.l  Algoritmo que faz a interseção de duas listas.Exemplos no SWI-Prolog: 23
  24. 24. Predicados built-in de Prologn  append(List1, List2, List12)n  member(Element, List)n  reverse(List1, List2)n  delete(List1, Element, List2)n  select(Element, List1, List2)n  permutation(List1, List2)n  prefix(Prefix, List)n  suffix(Suffix, List)n  sublist(List1, List2)n  last(List, Element)n  length(List, Length)n  nth(N, List, Element)n  min_list(List, Min)n  max_list(List, Max)n  sum_list(List, Sum)n  sort(List1, List2) 24
  25. 25. Ordem Alfanumérican  A ordem alfanumérica é usada para ordenar números e cadeias de caracteres.n  Existem alguns predicados pra ordenar listas: n  sort(Lista1, Lista2) 25
  26. 26. Bubble Sort 26
  27. 27. Listas Dinâmicasn  E se durante a execução precisarmos que o programa armazene listas? n  Exemplo: Num sistema de eleição precisamos armazenar os candidatos numa lista enquanto ocorre a votação. No final da execução do programa, precisamos que ele retorne o vencedor da votação. Como fazemos para, no decorrer da execução, o programa salvar essa lista? 27
  28. 28. Listas Dinâmicasn  Para resolver o problema anterior utilizamos Listas Dinâmicas.n  Para construir listas dinâmicas em PROLOG, temos que criar um fato que armazene uma lista. n  Exemplo: lista([]).n  No arquivo ListasDinamicas.pl mostramos uma regra para construir a lista dinâmica. n  criaLista :- retractall(listaDeProfessores(_)), assert(listaDeProfessores([])). 28
  29. 29. Testes para Listas Dinâmicasn  Os testes a seguir, servem para você observar o comportamento das regras de manipulação das listas dinâmicas. 29
  30. 30. Testes para Listas Dinâmicasn  ?- criaLista. ?- retornaLista(X). ?- insereElemento(nata, S). ?- insereElemento(delano,S). ?- retornaLista(X). ?- imprimirElementos. ?- retireElemento(savyo,S). ?- retireElemento(nata,S). ?- retornaLista(X). ?- zereLista. ?- retornaLista(X). 30
  31. 31. Testes para o Sisteman  Para rodar o sistema faça: n  ?- menu.n  Passos: n  Peça para o menu imprimir todos os professores. n  Peça para adicionar um elemento. n  Peça para o menu imprimir todos os professores. n  Peça para adicionar outro elemento. n  Peça para o menu imprimir todos os professores. n  Peça para remover um elemento que está na lista. n  Peça para o menu imprimir todos os professores. n  Peça para remover um elemento que não está na lista. n  Peça para o menu imprimir todos os professores. n  Peça para sair. n  Quando sair digite o que esta abaixo e observe que a lista foi zerada: n  ?- retornaLista(X). 31
  32. 32. Testes para o Sisteman  Para confirmar que a lista que criamos é dinâmica, vá até o arquivo ListasDinamicas.pl e troque: n  saiaDoSistema :- zereLista, write(Saindo do Sistema...). n  saiaDoSistema :- write(Saindo do Sistema...).n  Execute o teste anterior e veja que quando paramos a consulta da regra menu/0, a lista de candidatos permanece armazenado dinamicamente no banco de dados. 32
  33. 33. Dúvidas? 33
  34. 34. Referênciasn  FAVERO, Eloi L. Programação em Prolog: Uma abordagem prática. Departamento de Informática CCEN –UFPA. Versão 2006.n  PALAZZO, Luiz A. M. Introdução à Programação: PROLOG. Editora da Universidade Católica de Pelotas. Pelotas, 1997n  Listas Dinâmicas => Projeto de Lógica Matemática 2009.1 do grupo: Arthur Marques, Fernando Alves, Luiz Machado e Ramon Lopes 34

×