SlideShare ist ein Scribd-Unternehmen logo
1 von 34
Downloaden Sie, um offline zu lesen
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.2




Listas em Prolog


                         Grupo: Delano Oliveira
                                Izabela Vanessa
                                Natã Venâncio
                                Savyo Igor
Introdução
n    Representação interna recursiva
n    Sequência de qualquer número de itens
n    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ção
n    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ção
n    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ção
n    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
                    gerar
n    functor .             confusões




n    Notação simplificada: sequência de
      itens separados por vírgulas e incluídos
      entre colchetes.

                                                 6
Representação e Construção
n    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
Testes

n    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
Testes
n    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 listas
n    Ocorrência de elementos numa lista
      member(X, L)




                          True
                                    True
                            False



                                           10
Operações sobre listas
n    Ocorrência de elementos numa lista




                         Usando variáveis anônimas




                                                     11
Operações sobre listas
n    Concatenação de listas




                               True




                                      12
Operações sobre listas
    n    Concatenação de listas



Exemplos no SWI-Prolog:




                                   13
Operações sobre listas
    n    Concatenação de listas



Outras aplicações:



             Sucessor e antecessor de um item na lista




                           Apagar os elementos a partir do item na lista   14
Operações sobre listas
n    Remoção de elementos de uma lista
      select(termo, lista, lista1)




                                          15
Operações sobre listas
  n    Remoção de elementos de uma lista




Exemplos no SWI-Prolog:




                                            16
Operações sobre listas
n    Inversão de listas
 reverse(List1, List2)




                           17
Operações sobre listas
n     Inversão de listas

                            Mais tradicional




      Mais eficiente




                                               18
Operações sobre listas
n    Sublistas
        sublist(List1, List2)



                            True




                            False




                                    19
Operações sobre listas
n    Sublistas




                         20
Operações sobre listas
l     Tamanho de uma Lista
l     length([1, a, b], X).
l     Algoritmo para encontrar o tamanho de uma
       lista.




      Exemplos no SWI-Prolog:



                                                   21
Operações sobre listas
l    Algoritmo para encontrar o enésimo elemento
      de uma lista.




Exemplos no SWI-Prolog:




                                                22
Operações sobre listas
l    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 Prolog
n    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érica
n    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âmicas
n    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âmicas
n    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âmicas
n    Os testes a seguir, servem para você
      observar o comportamento das regras
      de manipulação das listas dinâmicas.




                                             29
Testes para Listas Dinâmicas
n    ?- 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 Sistema
n    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 Sistema
n    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ências
n    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,
      1997
n    Listas Dinâmicas => Projeto de Lógica
      Matemática 2009.1 do grupo: Arthur
      Marques, Fernando Alves, Luiz Machado e
      Ramon Lopes
                                                   34

Weitere ähnliche Inhalte

Was ist angesagt?

Banco de dados exercícios resolvidos
Banco de dados exercícios resolvidosBanco de dados exercícios resolvidos
Banco de dados exercícios resolvidosGleydson Sousa
 
Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)
Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)
Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)Leinylson Fontinele
 
Gerência de Memória
Gerência de MemóriaGerência de Memória
Gerência de Memóriaelliando dias
 
Lógica e Matemática Computacional - Aula 02
Lógica e Matemática Computacional - Aula 02Lógica e Matemática Computacional - Aula 02
Lógica e Matemática Computacional - Aula 02thomasdacosta
 
Bdm aula 5 - construindo modelos er e mapeamento er-relacional
Bdm   aula 5 - construindo modelos er e mapeamento er-relacionalBdm   aula 5 - construindo modelos er e mapeamento er-relacional
Bdm aula 5 - construindo modelos er e mapeamento er-relacionalTicianne Darin
 
Estrutura de Dados - Aula 09 - Listas Simplesmente Encadeadas
Estrutura de Dados - Aula 09 - Listas Simplesmente EncadeadasEstrutura de Dados - Aula 09 - Listas Simplesmente Encadeadas
Estrutura de Dados - Aula 09 - Listas Simplesmente EncadeadasLeinylson Fontinele
 
Lógica de Programação e Algoritmos
Lógica de Programação e AlgoritmosLógica de Programação e Algoritmos
Lógica de Programação e AlgoritmosMario Jorge Pereira
 
Estrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisEstrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisFabrício Lopes Sanchez
 
Apostila Modelo ER (Entidade Relacionamento)
Apostila Modelo ER (Entidade Relacionamento)Apostila Modelo ER (Entidade Relacionamento)
Apostila Modelo ER (Entidade Relacionamento)Ricardo Terra
 
Aula de Prolog 07 - Estruturas de Dados
Aula de Prolog 07 - Estruturas de DadosAula de Prolog 07 - Estruturas de Dados
Aula de Prolog 07 - Estruturas de DadosFabio Moura Pereira
 
Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Valmon Gaudencio
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenaçãoJonas Mendonça
 
Análise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de RecorrênciasAnálise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de RecorrênciasDelacyr Ferreira
 
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)Leinylson Fontinele
 
Lógica de Programação - Algoritmos
Lógica de Programação - AlgoritmosLógica de Programação - Algoritmos
Lógica de Programação - AlgoritmosRoney Sousa
 
Introdução a Algoritmos: Conceitos Básicos
Introdução a Algoritmos: Conceitos BásicosIntrodução a Algoritmos: Conceitos Básicos
Introdução a Algoritmos: Conceitos BásicosElaine Cecília Gatto
 

Was ist angesagt? (20)

Banco de dados exercícios resolvidos
Banco de dados exercícios resolvidosBanco de dados exercícios resolvidos
Banco de dados exercícios resolvidos
 
Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)
Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)
Banco de Dados II Aula 03 - Modelagem de Dados (Modelo Lógico)
 
Gerência de Memória
Gerência de MemóriaGerência de Memória
Gerência de Memória
 
Aula Prolog 09 - Listas
Aula Prolog 09 - ListasAula Prolog 09 - Listas
Aula Prolog 09 - Listas
 
Lógica e Matemática Computacional - Aula 02
Lógica e Matemática Computacional - Aula 02Lógica e Matemática Computacional - Aula 02
Lógica e Matemática Computacional - Aula 02
 
Bdm aula 5 - construindo modelos er e mapeamento er-relacional
Bdm   aula 5 - construindo modelos er e mapeamento er-relacionalBdm   aula 5 - construindo modelos er e mapeamento er-relacional
Bdm aula 5 - construindo modelos er e mapeamento er-relacional
 
Estrutura de Dados - Aula 09 - Listas Simplesmente Encadeadas
Estrutura de Dados - Aula 09 - Listas Simplesmente EncadeadasEstrutura de Dados - Aula 09 - Listas Simplesmente Encadeadas
Estrutura de Dados - Aula 09 - Listas Simplesmente Encadeadas
 
Lógica de Programação e Algoritmos
Lógica de Programação e AlgoritmosLógica de Programação e Algoritmos
Lógica de Programação e Algoritmos
 
Estrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisEstrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentais
 
Apostila Modelo ER (Entidade Relacionamento)
Apostila Modelo ER (Entidade Relacionamento)Apostila Modelo ER (Entidade Relacionamento)
Apostila Modelo ER (Entidade Relacionamento)
 
Aula de Prolog 07 - Estruturas de Dados
Aula de Prolog 07 - Estruturas de DadosAula de Prolog 07 - Estruturas de Dados
Aula de Prolog 07 - Estruturas de Dados
 
Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.
 
Linguagem C - Vetores
Linguagem C - VetoresLinguagem C - Vetores
Linguagem C - Vetores
 
Algoritmos de ordenação
Algoritmos de ordenaçãoAlgoritmos de ordenação
Algoritmos de ordenação
 
Análise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de RecorrênciasAnálise de Algoritmos - Solução de Recorrências
Análise de Algoritmos - Solução de Recorrências
 
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
Banco de Dados I - Aula 05 - Banco de Dados Relacional (Modelo Conceitual)
 
Lógica de Programação - Algoritmos
Lógica de Programação - AlgoritmosLógica de Programação - Algoritmos
Lógica de Programação - Algoritmos
 
Introdução a Algoritmos: Conceitos Básicos
Introdução a Algoritmos: Conceitos BásicosIntrodução a Algoritmos: Conceitos Básicos
Introdução a Algoritmos: Conceitos Básicos
 
Cord.polares
Cord.polaresCord.polares
Cord.polares
 
Introdução ao Prolog
Introdução ao PrologIntrodução ao Prolog
Introdução ao Prolog
 

Andere mochten auch

Apresentação sistema prolog
Apresentação sistema prologApresentação sistema prolog
Apresentação sistema prologNilo Ramos
 
Minicurso grails
Minicurso grailsMinicurso grails
Minicurso grailsNatã Melo
 
Animated transitions across UI views
Animated transitions across UI viewsAnimated transitions across UI views
Animated transitions across UI viewsVivian Motti
 
MATRACA: Ferramenta open source para auxílio a deficientes visuais no uso do ...
MATRACA: Ferramenta open source para auxílio a deficientes visuais no uso do ...MATRACA: Ferramenta open source para auxílio a deficientes visuais no uso do ...
MATRACA: Ferramenta open source para auxílio a deficientes visuais no uso do ...Natã Melo
 
Java Style Grading
Java Style Grading Java Style Grading
Java Style Grading Natã Melo
 
[Android] Publish on Google Play & Google Analytics
[Android] Publish on Google Play & Google Analytics[Android] Publish on Google Play & Google Analytics
[Android] Publish on Google Play & Google AnalyticsNatã Melo
 
Motores de busca em redes sociais
Motores de busca em redes sociaisMotores de busca em redes sociais
Motores de busca em redes sociaisNatã Melo
 
Sistemas Distribuídos - Publish-Subscribe - Kafka
Sistemas Distribuídos - Publish-Subscribe - KafkaSistemas Distribuídos - Publish-Subscribe - Kafka
Sistemas Distribuídos - Publish-Subscribe - KafkaNatã Melo
 
[Android] Google Service Play & Google Maps
[Android] Google Service Play & Google Maps[Android] Google Service Play & Google Maps
[Android] Google Service Play & Google MapsNatã Melo
 
Biografia de Bill Gates - Parte 4
Biografia de Bill Gates - Parte 4Biografia de Bill Gates - Parte 4
Biografia de Bill Gates - Parte 4Natã Melo
 
Educação a Distância
Educação a DistânciaEducação a Distância
Educação a DistânciaNatã Melo
 
Introdução à Lógica de Predicados
Introdução à Lógica de PredicadosIntrodução à Lógica de Predicados
Introdução à Lógica de PredicadosHugo Souza
 
MDA - Model Driven Architecture
MDA - Model Driven ArchitectureMDA - Model Driven Architecture
MDA - Model Driven ArchitectureNatã Melo
 

Andere mochten auch (19)

IA Prolog
IA PrologIA Prolog
IA Prolog
 
Aquece Para a prova de EDA3
Aquece Para a prova de EDA3Aquece Para a prova de EDA3
Aquece Para a prova de EDA3
 
Aplicação prolog
Aplicação prologAplicação prolog
Aplicação prolog
 
Apresentação sistema prolog
Apresentação sistema prologApresentação sistema prolog
Apresentação sistema prolog
 
Listas em C
Listas em CListas em C
Listas em C
 
Número de Fibonacci
Número de FibonacciNúmero de Fibonacci
Número de Fibonacci
 
Minicurso grails
Minicurso grailsMinicurso grails
Minicurso grails
 
Animated transitions across UI views
Animated transitions across UI viewsAnimated transitions across UI views
Animated transitions across UI views
 
MATRACA: Ferramenta open source para auxílio a deficientes visuais no uso do ...
MATRACA: Ferramenta open source para auxílio a deficientes visuais no uso do ...MATRACA: Ferramenta open source para auxílio a deficientes visuais no uso do ...
MATRACA: Ferramenta open source para auxílio a deficientes visuais no uso do ...
 
Java Style Grading
Java Style Grading Java Style Grading
Java Style Grading
 
[Android] Publish on Google Play & Google Analytics
[Android] Publish on Google Play & Google Analytics[Android] Publish on Google Play & Google Analytics
[Android] Publish on Google Play & Google Analytics
 
Motores de busca em redes sociais
Motores de busca em redes sociaisMotores de busca em redes sociais
Motores de busca em redes sociais
 
Sistemas Distribuídos - Publish-Subscribe - Kafka
Sistemas Distribuídos - Publish-Subscribe - KafkaSistemas Distribuídos - Publish-Subscribe - Kafka
Sistemas Distribuídos - Publish-Subscribe - Kafka
 
[Android] Google Service Play & Google Maps
[Android] Google Service Play & Google Maps[Android] Google Service Play & Google Maps
[Android] Google Service Play & Google Maps
 
Biografia de Bill Gates - Parte 4
Biografia de Bill Gates - Parte 4Biografia de Bill Gates - Parte 4
Biografia de Bill Gates - Parte 4
 
Educação a Distância
Educação a DistânciaEducação a Distância
Educação a Distância
 
Introdução à Lógica de Predicados
Introdução à Lógica de PredicadosIntrodução à Lógica de Predicados
Introdução à Lógica de Predicados
 
Introducing MDSD
Introducing MDSDIntroducing MDSD
Introducing MDSD
 
MDA - Model Driven Architecture
MDA - Model Driven ArchitectureMDA - Model Driven Architecture
MDA - Model Driven Architecture
 

Ähnlich wie Listas em Prolog

Ähnlich wie Listas em Prolog (20)

Listas Encadeadas
Listas EncadeadasListas Encadeadas
Listas Encadeadas
 
Aula - Estruturas de Dados em Python (Curso de Python Básico -- FATEC SENAI M...
Aula - Estruturas de Dados em Python (Curso de Python Básico -- FATEC SENAI M...Aula - Estruturas de Dados em Python (Curso de Python Básico -- FATEC SENAI M...
Aula - Estruturas de Dados em Python (Curso de Python Básico -- FATEC SENAI M...
 
Listas: conceito e estáticas
Listas:  conceito e estáticasListas:  conceito e estáticas
Listas: conceito e estáticas
 
Listas Estáticas Encadeadas usando linguagem C
Listas Estáticas Encadeadas usando linguagem CListas Estáticas Encadeadas usando linguagem C
Listas Estáticas Encadeadas usando linguagem C
 
30-aula30.pdf
30-aula30.pdf30-aula30.pdf
30-aula30.pdf
 
Lpiii dp-apostila
Lpiii dp-apostilaLpiii dp-apostila
Lpiii dp-apostila
 
Programacao logica
Programacao logicaProgramacao logica
Programacao logica
 
Algoritmo e Estrutura de dados em C - Aula 01 - 2019
Algoritmo e Estrutura de dados em C - Aula 01 - 2019Algoritmo e Estrutura de dados em C - Aula 01 - 2019
Algoritmo e Estrutura de dados em C - Aula 01 - 2019
 
Introducao ao python
Introducao ao pythonIntroducao ao python
Introducao ao python
 
Paradigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellParadigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo Haskell
 
Lista Circular em Java
Lista Circular em JavaLista Circular em Java
Lista Circular em Java
 
Slide_Python.pdf
Slide_Python.pdfSlide_Python.pdf
Slide_Python.pdf
 
05 listas
05 listas05 listas
05 listas
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Aulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton YagamiAulas de estrutura de dados por Ayrton Yagami
Aulas de estrutura de dados por Ayrton Yagami
 
Python
PythonPython
Python
 
Python 02
Python 02Python 02
Python 02
 
Slides collections
Slides collectionsSlides collections
Slides collections
 
Programando em python recursao
Programando em python   recursaoProgramando em python   recursao
Programando em python recursao
 
Skip List
Skip ListSkip List
Skip List
 

Mehr von Natã Melo

Biografia de Bill Gates - Parte 3
Biografia de Bill Gates - Parte 3Biografia de Bill Gates - Parte 3
Biografia de Bill Gates - Parte 3Natã Melo
 
Biografia de Bill Gates - Parte 2
Biografia de Bill Gates - Parte 2Biografia de Bill Gates - Parte 2
Biografia de Bill Gates - Parte 2Natã Melo
 
Biografia de Bill Gates - Parte 1
Biografia de Bill Gates - Parte 1Biografia de Bill Gates - Parte 1
Biografia de Bill Gates - Parte 1Natã Melo
 
Copas do Mundo de Futebol
Copas do Mundo de FutebolCopas do Mundo de Futebol
Copas do Mundo de FutebolNatã Melo
 
Linguagem Python
Linguagem PythonLinguagem Python
Linguagem PythonNatã Melo
 
Sistemas Recomendação em Redes Sociais
Sistemas Recomendação em Redes SociaisSistemas Recomendação em Redes Sociais
Sistemas Recomendação em Redes SociaisNatã Melo
 
Sistema de Recomendação - Amigos DINS
Sistema de Recomendação - Amigos DINSSistema de Recomendação - Amigos DINS
Sistema de Recomendação - Amigos DINSNatã Melo
 
Regresão Múltipla
Regresão MúltiplaRegresão Múltipla
Regresão MúltiplaNatã Melo
 
Teste Dirigido por Modelos
Teste Dirigido por ModelosTeste Dirigido por Modelos
Teste Dirigido por ModelosNatã Melo
 
Demonstração ApTest Manager
Demonstração   ApTest ManagerDemonstração   ApTest Manager
Demonstração ApTest ManagerNatã Melo
 
Redes Sociais - Utilizando-as de forma inteligente
Redes Sociais - Utilizando-as de forma inteligenteRedes Sociais - Utilizando-as de forma inteligente
Redes Sociais - Utilizando-as de forma inteligenteNatã Melo
 
Apresentação JavaCG MetaCG
Apresentação JavaCG MetaCGApresentação JavaCG MetaCG
Apresentação JavaCG MetaCGNatã Melo
 

Mehr von Natã Melo (17)

Biografia de Bill Gates - Parte 3
Biografia de Bill Gates - Parte 3Biografia de Bill Gates - Parte 3
Biografia de Bill Gates - Parte 3
 
Biografia de Bill Gates - Parte 2
Biografia de Bill Gates - Parte 2Biografia de Bill Gates - Parte 2
Biografia de Bill Gates - Parte 2
 
Biografia de Bill Gates - Parte 1
Biografia de Bill Gates - Parte 1Biografia de Bill Gates - Parte 1
Biografia de Bill Gates - Parte 1
 
Copas do Mundo de Futebol
Copas do Mundo de FutebolCopas do Mundo de Futebol
Copas do Mundo de Futebol
 
Linguagem Python
Linguagem PythonLinguagem Python
Linguagem Python
 
Sistemas Recomendação em Redes Sociais
Sistemas Recomendação em Redes SociaisSistemas Recomendação em Redes Sociais
Sistemas Recomendação em Redes Sociais
 
Sistema de Recomendação - Amigos DINS
Sistema de Recomendação - Amigos DINSSistema de Recomendação - Amigos DINS
Sistema de Recomendação - Amigos DINS
 
Terremotos
TerremotosTerremotos
Terremotos
 
Regresão Múltipla
Regresão MúltiplaRegresão Múltipla
Regresão Múltipla
 
Linguagem Go
Linguagem GoLinguagem Go
Linguagem Go
 
Teste Dirigido por Modelos
Teste Dirigido por ModelosTeste Dirigido por Modelos
Teste Dirigido por Modelos
 
Demonstração ApTest Manager
Demonstração   ApTest ManagerDemonstração   ApTest Manager
Demonstração ApTest Manager
 
MetaCG
MetaCG MetaCG
MetaCG
 
Redes Sociais - Utilizando-as de forma inteligente
Redes Sociais - Utilizando-as de forma inteligenteRedes Sociais - Utilizando-as de forma inteligente
Redes Sociais - Utilizando-as de forma inteligente
 
Apresentação JavaCG MetaCG
Apresentação JavaCG MetaCGApresentação JavaCG MetaCG
Apresentação JavaCG MetaCG
 
Python aula 1
Python aula 1Python aula 1
Python aula 1
 
Python aula 2
Python aula 2Python aula 2
Python aula 2
 

Listas em Prolog

  • 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.2 Listas em Prolog Grupo: Delano Oliveira Izabela Vanessa Natã Venâncio Savyo Igor
  • 2. Introdução n  Representação interna recursiva n  Sequência de qualquer número de itens n  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. Representação e Construção n  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. Representação e Construção n  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. Representação e Construção n  Em Prolog, Listas são na realidade árvores. Veja na figura abaixo, como ficaria a árvore da lista do Exemplo 2. 5
  • 6. Representação e Construção gerar n  functor . confusões n  Notação simplificada: sequência de itens separados por vírgulas e incluídos entre colchetes. 6
  • 7. Representação e Construção n  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. Testes n  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. Testes n  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. Operações sobre listas n  Ocorrência de elementos numa lista member(X, L) True True False 10
  • 11. Operações sobre listas n  Ocorrência de elementos numa lista Usando variáveis anônimas 11
  • 12. Operações sobre listas n  Concatenação de listas True 12
  • 13. Operações sobre listas n  Concatenação de listas Exemplos no SWI-Prolog: 13
  • 14. Operações sobre listas n  Concatenação de listas Outras aplicações: Sucessor e antecessor de um item na lista Apagar os elementos a partir do item na lista 14
  • 15. Operações sobre listas n  Remoção de elementos de uma lista select(termo, lista, lista1) 15
  • 16. Operações sobre listas n  Remoção de elementos de uma lista Exemplos no SWI-Prolog: 16
  • 17. Operações sobre listas n  Inversão de listas reverse(List1, List2) 17
  • 18. Operações sobre listas n  Inversão de listas Mais tradicional Mais eficiente 18
  • 19. Operações sobre listas n  Sublistas sublist(List1, List2) True False 19
  • 21. Operações sobre listas l  Tamanho de uma Lista l  length([1, a, b], X). l  Algoritmo para encontrar o tamanho de uma lista. Exemplos no SWI-Prolog: 21
  • 22. Operações sobre listas l  Algoritmo para encontrar o enésimo elemento de uma lista. Exemplos no SWI-Prolog: 22
  • 23. Operações sobre listas l  Lista para a teoria dos conjuntos. l  Algoritmo que faz a interseção de duas listas. Exemplos no SWI-Prolog: 23
  • 24. Predicados built-in de Prolog n  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. Ordem Alfanumérica n  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
  • 27. Listas Dinâmicas n  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. Listas Dinâmicas n  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. Testes para Listas Dinâmicas n  Os testes a seguir, servem para você observar o comportamento das regras de manipulação das listas dinâmicas. 29
  • 30. Testes para Listas Dinâmicas n  ?- 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. Testes para o Sistema n  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. Testes para o Sistema n  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. Dúvidas? 33
  • 34. Referências n  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, 1997 n  Listas Dinâmicas => Projeto de Lógica Matemática 2009.1 do grupo: Arthur Marques, Fernando Alves, Luiz Machado e Ramon Lopes 34