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?

Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores Binárias
Adriano Teixeira de Souza
 
Aula 7 inducao matematica-primeiroprincipio
Aula 7   inducao matematica-primeiroprincipioAula 7   inducao matematica-primeiroprincipio
Aula 7 inducao matematica-primeiroprincipio
wab030
 
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
Ulrich Schiel
 
Introdução à Teoria dos Grafos
Introdução à Teoria dos GrafosIntrodução à Teoria dos Grafos
Introdução à Teoria dos Grafos
Bianca Dantas
 
Matemática Discreta - Parte III definicoes indutivas
Matemática Discreta - Parte III definicoes indutivasMatemática Discreta - Parte III definicoes indutivas
Matemática Discreta - Parte III definicoes indutivas
Ulrich Schiel
 
Funcoes trigonometricas.ppt
Funcoes trigonometricas.pptFuncoes trigonometricas.ppt
Funcoes trigonometricas.ppt
Rodrigo Carvalho
 
Árvores: Conceitos e binárias
Árvores:  Conceitos e bináriasÁrvores:  Conceitos e binárias
Árvores: Conceitos e binárias
Sérgio Souza Costa
 

Was ist angesagt? (20)

Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores Binárias
 
Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)Problema da Mochila 0-1 (Knapsack problem)
Problema da Mochila 0-1 (Knapsack problem)
 
GP4US - Pesquisa operacional exercicios resolvidos - metodo simplex
GP4US - Pesquisa operacional   exercicios resolvidos - metodo simplexGP4US - Pesquisa operacional   exercicios resolvidos - metodo simplex
GP4US - Pesquisa operacional exercicios resolvidos - metodo simplex
 
Estrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas EncadeadasEstrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas Encadeadas
 
Fundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de SoftwareFundamentos de Padrões de Projeto de Software
Fundamentos de Padrões de Projeto de Software
 
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
 
14.3 derivadas parciais [pt. 1]
14.3 derivadas parciais [pt. 1]14.3 derivadas parciais [pt. 1]
14.3 derivadas parciais [pt. 1]
 
Aula 7 inducao matematica-primeiroprincipio
Aula 7   inducao matematica-primeiroprincipioAula 7   inducao matematica-primeiroprincipio
Aula 7 inducao matematica-primeiroprincipio
 
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
 
Introdução à Teoria dos Grafos
Introdução à Teoria dos GrafosIntrodução à Teoria dos Grafos
Introdução à Teoria dos Grafos
 
Matemática Discreta - Parte III definicoes indutivas
Matemática Discreta - Parte III definicoes indutivasMatemática Discreta - Parte III definicoes indutivas
Matemática Discreta - Parte III definicoes indutivas
 
Funcoes trigonometricas.ppt
Funcoes trigonometricas.pptFuncoes trigonometricas.ppt
Funcoes trigonometricas.ppt
 
Lógica e Matemática Computacional - Exercícios 03
Lógica e Matemática Computacional - Exercícios 03Lógica e Matemática Computacional - Exercícios 03
Lógica e Matemática Computacional - Exercícios 03
 
Análise de Algoritmos - Indução Finita
Análise de Algoritmos - Indução FinitaAnálise de Algoritmos - Indução Finita
Análise de Algoritmos - Indução Finita
 
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)
Estrutura de Dados Aula 13 - Árvores (conceito, elementos, tipos e utilizações)
 
Exercícios Resolvidos: Integração por substituição trigonométrica
Exercícios Resolvidos: Integração por substituição trigonométricaExercícios Resolvidos: Integração por substituição trigonométrica
Exercícios Resolvidos: Integração por substituição trigonométrica
 
Árvores: Conceitos e binárias
Árvores:  Conceitos e bináriasÁrvores:  Conceitos e binárias
Árvores: Conceitos e binárias
 
Estrutura de dados - Árvores Binárias
Estrutura de dados - Árvores BináriasEstrutura de dados - Árvores Binárias
Estrutura de dados - Árvores Binárias
 
Estrutura de dados - Filas
Estrutura de dados - FilasEstrutura de dados - Filas
Estrutura de dados - Filas
 
Produto cartesiano - Relação - Função
Produto cartesiano - Relação - FunçãoProduto cartesiano - Relação - Função
Produto cartesiano - Relação - Função
 

Andere mochten auch

Minicurso grails
Minicurso grailsMinicurso grails
Minicurso grails
Natã Melo
 
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
 
Motores de busca em redes sociais
Motores de busca em redes sociaisMotores de busca em redes sociais
Motores de busca em redes sociais
Natã Melo
 
Biografia de Bill Gates - Parte 4
Biografia de Bill Gates - Parte 4Biografia de Bill Gates - Parte 4
Biografia de Bill Gates - Parte 4
Natã Melo
 
Educação a Distância
Educação a DistânciaEducação a Distância
Educação a Distância
Natã Melo
 
MDA - Model Driven Architecture
MDA - Model Driven ArchitectureMDA - Model Driven Architecture
MDA - Model Driven Architecture
Natã Melo
 

Andere mochten auch (18)

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

Paradigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellParadigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo Haskell
Sé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 python
Alvaro Oliveira
 

Ähnlich wie Listas em Prolog (20)

Minicurso Prolog
Minicurso PrologMinicurso Prolog
Minicurso Prolog
 
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
 
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
 
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
 

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 3
Natã Melo
 
Biografia de Bill Gates - Parte 2
Biografia de Bill Gates - Parte 2Biografia de Bill Gates - Parte 2
Biografia de Bill Gates - Parte 2
Natã Melo
 
Biografia de Bill Gates - Parte 1
Biografia de Bill Gates - Parte 1Biografia de Bill Gates - Parte 1
Biografia de Bill Gates - Parte 1
Natã Melo
 
Copas do Mundo de Futebol
Copas do Mundo de FutebolCopas do Mundo de Futebol
Copas do Mundo de Futebol
Natã Melo
 
Linguagem Python
Linguagem PythonLinguagem Python
Linguagem Python
Natã Melo
 
Sistemas Recomendação em Redes Sociais
Sistemas Recomendação em Redes SociaisSistemas Recomendação em Redes Sociais
Sistemas Recomendação em Redes Sociais
Natã Melo
 
Sistema de Recomendação - Amigos DINS
Sistema de Recomendação - Amigos DINSSistema de Recomendação - Amigos DINS
Sistema de Recomendação - Amigos DINS
Natã Melo
 
Regresão Múltipla
Regresão MúltiplaRegresão Múltipla
Regresão Múltipla
Natã Melo
 
Teste Dirigido por Modelos
Teste Dirigido por ModelosTeste Dirigido por Modelos
Teste Dirigido por Modelos
Natã Melo
 
Demonstração ApTest Manager
Demonstração   ApTest ManagerDemonstração   ApTest Manager
Demonstração ApTest Manager
Natã 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 inteligente
Natã Melo
 
Apresentação JavaCG MetaCG
Apresentação JavaCG MetaCGApresentação JavaCG MetaCG
Apresentação JavaCG MetaCG
Natã 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
 

Kürzlich hochgeladen

Kürzlich hochgeladen (8)

Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 

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