SlideShare uma empresa Scribd logo
1 de 34
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

Inserindo em Ordem Crescente na Lista Encadeada
Inserindo em Ordem Crescente na Lista EncadeadaInserindo em Ordem Crescente na Lista Encadeada
Inserindo em Ordem Crescente na Lista EncadeadaElaine Cecília Gatto
 
Aula espaço vetorial
Aula espaço vetorialAula espaço vetorial
Aula espaço vetorialTuane Paixão
 
Química Geral 2016/1 Aula 19
Química Geral 2016/1 Aula 19Química Geral 2016/1 Aula 19
Química Geral 2016/1 Aula 19Ednilsom Orestes
 
Substituição aromática eletrofilíca
Substituição aromática eletrofilícaSubstituição aromática eletrofilíca
Substituição aromática eletrofilícaAdrianne Mendonça
 
Introdução ao Prolog - Prof. Sérgio S. Costa
Introdução ao Prolog - Prof. Sérgio S. CostaIntrodução ao Prolog - Prof. Sérgio S. Costa
Introdução ao Prolog - Prof. Sérgio S. CostaLeinylson Fontinele
 
Matemática Discreta - Parte IV teoria dos-conjuntos
Matemática Discreta - Parte IV teoria dos-conjuntosMatemática Discreta - Parte IV teoria dos-conjuntos
Matemática Discreta - Parte IV teoria dos-conjuntosUlrich Schiel
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Adriano Teixeira de Souza
 
57701066 matematica-discreta-exercicios-resolvidos
57701066 matematica-discreta-exercicios-resolvidos57701066 matematica-discreta-exercicios-resolvidos
57701066 matematica-discreta-exercicios-resolvidosHAROLDO MIRANDA DA COSTA JR
 
Análise assintótica
Análise assintóticaAnálise assintótica
Análise assintóticaPablo Silva
 
Haletos de alquila: reações de substituição nucleofílica
Haletos de alquila: reações de substituição nucleofílicaHaletos de alquila: reações de substituição nucleofílica
Haletos de alquila: reações de substituição nucleofílicaEduardo Macedo
 

Mais procurados (20)

Inserindo em Ordem Crescente na Lista Encadeada
Inserindo em Ordem Crescente na Lista EncadeadaInserindo em Ordem Crescente na Lista Encadeada
Inserindo em Ordem Crescente na Lista Encadeada
 
Aula espaço vetorial
Aula espaço vetorialAula espaço vetorial
Aula espaço vetorial
 
Química Geral 2016/1 Aula 19
Química Geral 2016/1 Aula 19Química Geral 2016/1 Aula 19
Química Geral 2016/1 Aula 19
 
Recursividade
RecursividadeRecursividade
Recursividade
 
Minicurso Prolog
Minicurso PrologMinicurso Prolog
Minicurso Prolog
 
Substituição aromática eletrofilíca
Substituição aromática eletrofilícaSubstituição aromática eletrofilíca
Substituição aromática eletrofilíca
 
Introdução ao Prolog - Prof. Sérgio S. Costa
Introdução ao Prolog - Prof. Sérgio S. CostaIntrodução ao Prolog - Prof. Sérgio S. Costa
Introdução ao Prolog - Prof. Sérgio S. Costa
 
Paradigmas de programação
Paradigmas de programaçãoParadigmas de programação
Paradigmas de programação
 
Pilha e filas
Pilha e filasPilha e filas
Pilha e filas
 
Matemática Discreta - Parte IV teoria dos-conjuntos
Matemática Discreta - Parte IV teoria dos-conjuntosMatemática Discreta - Parte IV teoria dos-conjuntos
Matemática Discreta - Parte IV teoria dos-conjuntos
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
 
Aula sobre Tabela Hash
Aula sobre Tabela HashAula sobre Tabela Hash
Aula sobre Tabela Hash
 
Estrutura de dados em Java - Pilhas
Estrutura de dados em Java - PilhasEstrutura de dados em Java - Pilhas
Estrutura de dados em Java - Pilhas
 
Introdução a python
Introdução a pythonIntrodução a python
Introdução a python
 
57701066 matematica-discreta-exercicios-resolvidos
57701066 matematica-discreta-exercicios-resolvidos57701066 matematica-discreta-exercicios-resolvidos
57701066 matematica-discreta-exercicios-resolvidos
 
Análise assintótica
Análise assintóticaAnálise assintótica
Análise assintótica
 
Estrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas EncadeadasEstrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas Encadeadas
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas Estrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Haletos de alquila: reações de substituição nucleofílica
Haletos de alquila: reações de substituição nucleofílicaHaletos de alquila: reações de substituição nucleofílica
Haletos de alquila: reações de substituição nucleofílica
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 

Destaque

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
 

Destaque (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
 

Semelhante a Listas em Prolog

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...Filipe Chagas Ferraz
 
Aula sobre o uso de coleções em python...
Aula sobre o uso de coleções em python...Aula sobre o uso de coleções em python...
Aula sobre o uso de coleções em python...ssusera12037
 
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 CMarcosEvandroCintra
 
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 - 2019Eduardo S. Pereira
 
Paradigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellParadigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellSérgio Souza Costa
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em pythonAlvaro Oliveira
 
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 YagamiAyrton Yagami
 
Programando em python recursao
Programando em python   recursaoProgramando em python   recursao
Programando em python recursaosamuelthiago
 

Semelhante a 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...
 
Aula sobre o uso de coleções em python...
Aula sobre o uso de coleções em python...Aula sobre o uso de coleções em python...
Aula sobre o uso de coleções em python...
 
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
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em python
 
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
 

Mais de 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
 

Mais de 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
 

Último

From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdfFrom_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdfRodolpho Concurde
 
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Dirceu Resende
 
Concurso Caixa TI - Imersão Final - Rogério Araújo.pdf
Concurso Caixa TI - Imersão Final - Rogério Araújo.pdfConcurso Caixa TI - Imersão Final - Rogério Araújo.pdf
Concurso Caixa TI - Imersão Final - Rogério Araújo.pdfGuilhermeRodrigues896381
 
Apresentação Comercial VITAL DATA 2024.pdf
Apresentação Comercial VITAL DATA 2024.pdfApresentação Comercial VITAL DATA 2024.pdf
Apresentação Comercial VITAL DATA 2024.pdfCarlos Gomes
 
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)Alessandro Almeida
 
Certificado - Data Analytics - CoderHouse.pdf
Certificado - Data Analytics - CoderHouse.pdfCertificado - Data Analytics - CoderHouse.pdf
Certificado - Data Analytics - CoderHouse.pdfLarissa Souza
 

Último (6)

From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdfFrom_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
 
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
 
Concurso Caixa TI - Imersão Final - Rogério Araújo.pdf
Concurso Caixa TI - Imersão Final - Rogério Araújo.pdfConcurso Caixa TI - Imersão Final - Rogério Araújo.pdf
Concurso Caixa TI - Imersão Final - Rogério Araújo.pdf
 
Apresentação Comercial VITAL DATA 2024.pdf
Apresentação Comercial VITAL DATA 2024.pdfApresentação Comercial VITAL DATA 2024.pdf
Apresentação Comercial VITAL DATA 2024.pdf
 
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
 
Certificado - Data Analytics - CoderHouse.pdf
Certificado - Data Analytics - CoderHouse.pdfCertificado - Data Analytics - CoderHouse.pdf
Certificado - Data Analytics - CoderHouse.pdf
 

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