Listas em Prolog
Upcoming SlideShare
Loading in...5
×
 

Listas em Prolog

on

  • 8,859 views

 

Statistics

Views

Total Views
8,859
Views on SlideShare
8,859
Embed Views
0

Actions

Likes
4
Downloads
136
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Listas em Prolog Listas em Prolog Presentation Transcript

  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • Operações sobre listasn  Ocorrência de elementos numa lista member(X, L) True True False 10
  • Operações sobre listasn  Ocorrência de elementos numa lista Usando variáveis anônimas 11
  • Operações sobre listasn  Concatenação de listas True 12
  • Operações sobre listas n  Concatenação de listasExemplos no SWI-Prolog: 13
  • 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
  • Operações sobre listasn  Remoção de elementos de uma lista select(termo, lista, lista1) 15
  • Operações sobre listas n  Remoção de elementos de uma listaExemplos no SWI-Prolog: 16
  • Operações sobre listasn  Inversão de listas reverse(List1, List2) 17
  • Operações sobre listasn  Inversão de listas Mais tradicional Mais eficiente 18
  • Operações sobre listasn  Sublistas sublist(List1, List2) True False 19
  • Operações sobre listasn  Sublistas 20
  • 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
  • Operações sobre listasl  Algoritmo para encontrar o enésimo elemento de uma lista.Exemplos no SWI-Prolog: 22
  • 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
  • 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
  • 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
  • Bubble Sort 26
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • Dúvidas? 33
  • 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