Vinicius Ponte Machado

Slides:



Advertisements
Apresentações semelhantes
Programação Funcional
Advertisements

FAPE - Curso de Ciência da Computação
Motivação para listas duplamente encadeadas e circulares
Lógica Matemática e Computacional 7 – Introdução à Programação Lógica
Universidade Federal de Campina Grande – UFCG Centro de Engenharia Elétrica e Informática – CEEI Departamento de Sistemas e Computação – DSC Máquina de.
Lógica Fuzzy Aplicada a Sistemas de Diagnóstico
Sistema de Arquivos - PROTEÇÃO DE ARQUIVOS
Informática Aplicada.
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Informática Aplicada.
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Introdução à Programação Lógica
Introdução à Linguagem Prolog
Busca em Profundidade Para encontrar um caminho de solução Sol, de um dado nó para algum nó objetivo Se N é um nó objetivo, então Sol=[N] Se há um nó N1.
Estatística Aula 17 Prof. Marllus Gustavo Ferreira Passos das Neves
Estatística Básica Utilizando o Excel
SQL – Noções Gerais Por Márcia Jacyntha N. Rodrigues Lucena
Reconhecimento de Padrões Segmentação
Árvores Introdução e Aplicações Árvores de Busca Binária Fundamentos
Programação Lógica: PROLOG
04(c) 2007 Gustavo Motta1 Introdução ao -calculus Prof. Gustavo Motta Departamento de Informática/UFPB.
Construção de Compiladores
Construção de Compiladores
6. Backtracking e Controle
5. Processamento de Listas
COMO FUNCIONA A SIMULAÇÃO
Como fazer essa atividade?
Resolução de Sistemas Lineares Métodos Exatos Fatoração LU
MATRIZES REAIS ( 3ª AULA ).
A Lógica das Sentenças Abertas Profa. Ana Florencia Aula 9
Personalizando Tabelas
LISTAS Uma lista é uma estrutura de dados muito comum na programação não numérica (com particular destaque na computação simbólica onde representa quase.
Inteligência Artificial: A Linguagem Prolog (parte 2)
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Ponteiros em Pascal Variáveis ponteiros são aquelas que guardam o endereço de outra, possibilitando o acesso a seu conteúdo. Declaração em Pascal:  var.
LISTAS Uma lista é uma estrutura de dados muito comum na programação não numérica (com particular destaque na computação simbólica onde representa quase.
Elaboração da ficha catalográfica para teses e dissertações TUTORIAL
Capítulo 3 Estruturas de Controle
Prof. Natalia Castro Fernandes Engenharia de Telecomunicações – UFF 2º semestre/2012.
TRABALHO MATEMÁTICA DISCRETA
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
AULA 2 Função Afim Função Inversa Função Composta.
Clique para editar o estilo do título mestre Clique para editar os estilos do texto mestre –Segundo nível Terceiro nível –Quarto nível »Quinto nível 1.
Cássio Cristo Dawyson Guerra Matheu Santos
Operadores Relacionais, Lógicos e comandos de condição
Cálculo relacional Lílian Simão Oliveira.
Indução Matemática Recursão
Ciência e Tecnologia para o Desenvolvimento Social VII DIGITE AQUI SEU TÍTULO Modalidade: ”Gradução ou Ensino Médio/Técnico” Nome Completo do autor 1 ¹;
Algoritmos de Busca em Prolog
Faculdade Talentos Humanos - FACTHUS - Algoritmo I - Rogério Rodrigues
Matemática e suas Tecnologias - Matemática PROBABILIDADE CONDICIONAL
Fábio de Oliveira Borges
Campus de Caraguatatuba Aula 16e: Exercícios de View
INTRODUÇÃO À PROGRAMAÇÃO EM LÓGICA Profa. Joseluce de Farias Cunha
Pontifícia Universidade Católica de Goiás Departamento de Engenharia Curso de Graduação em Engenharia de Produção ENG 1004 – Linguagem de Programação para.
Pontifícia Universidade Católica de Goiás Departamento de Engenharia Curso de Graduação em Engenharia de Produção ENG 1004 – Linguagem de Programação para.
Universidade Federal de Lavras Departamento de Ciência da Computação
MENU ARQUIVO Comando Imprimir Imprimi o documento atual # Impressora
Aula 2. Hoje vamos ver um assunto diferente: Vamos aprender a retirar uma foto de um lugar e colar em outro local. Vamos usar duas fotos diferentes; Neste.
Inserir o título: letra Arial 80. O título deve ser claro e conciso
Vinicius Ponte Machado
Guia para cadastro e utilização da GRADE Londrisoft Informática.
Interpretação do Teorema de Herbrand
Metodologia da Pesquisa em Ensino de Ciências I
Como Criar um Curso Utilizando o Editor de Aulas Viviane Guimarães Ribeiro.
PROGRAMAÇÃO LÓGICA Vinicius Ponte Machado Aula 13 – Predicados de Controle UNIVERSIDADE FEDERAL DO PIAUÍ – UFPI Departamento de Informática & Estatística.
Nome do autor Digite aqui seu título
UNIVERSIDADE TECNOLÓGICA FEDERAL DO PARANÁ DEPARTAMENTO DE ENGENHARIA MECÂNICA LABORATÓRIO DE MECÂNICA DOS FLUIDOS ME36L – TRANSMISSÃO DE CALOR I PROF.
Lição (Editando Lição) Autor: Skyup Informática. Lição – Página Principal Assim que for concluída a criação do módulo e a adição de suas configurações.
Transcrição da apresentação:

Vinicius Ponte Machado UNIVERSIDADE FEDERAL DO PIAUÍ – UFPI Departamento de Informática & Estatística Curso de Ciência da Computação PROGRAMAÇÃO LÓGICA Vinicius Ponte Machado Aula 9 – Listas

Remoção de elementos de uma lista A remoção de um elemento X de uma lista L pode ser programada através da relação: remover(X, L, L1) onde L1 é a mesma lista L com o elemento X removido. A relação remover/3 pode ser definida de maneira similar à relação de ocorrência. Novamente são dois casos a estudar: Se X é a cabeça da lista L, então L1 será o seu corpo; Se X está no corpo de L, então L1 é obtida removendo X desse corpo.

Remoção de elementos de uma lista Em Prolog, isso é escrito da seguinte maneira: remover(X, [X | C], C). remover(X, [Y | C], [Y | D]) :- remover(X, C, D). Assim como a relação membro/2, remover/3 é também não-determinística por natureza. Se há diversas ocorrências de X em L, a relação remove/3 é capaz de retirar cada uma delas através do mecanismo de backtracking do Prolog. Evidentemente, em cada execução do programa remove/3 retiramos somente uma das ocorrências de X, deixando as demais intocáveis. Por exemplo: ?-remover(a, [a, b, a, a], L). L=[b, a, a]; L=[a, b, a]; Não

Remoção de elementos de uma lista remover/3 irá falhar se a lista L não contiver nenhuma ocorrência do elemento X. Essa relação pode ser ainda usada no sentido inverso para inserir um novo item em qualquer lugar da lista. Por exemplo, pode-se formular a questão: "Qual é a lista L, da qual retirando-se 'a' , obtem-se a lista [b, c, d]?" ?-remover(a, L, [b, c, d]). L=[a, b, c, d]; L=[b, a, c, d]; L=[b, c, a, d]; L=[b, c, d, a]; Não

Tamanho de uma lista A relação tamanho/2, representada por tamanho(L, T) será verdadeira quando T for o número de elementos existentes em L: tamanho([], 0). tamanho([_ | R], N) :- tamanho(R, N1), N is N1+1. Por exemplo: ?-tamanho([a, b, c, d, e], X). X=5

Seleção de Elementos Particulares selecionar exatamente o enésimo elemento de uma lista. O predicado enésimo/3, a seguir, realiza esta função:  enésimo(1, X, [X | _]). enésimo(N, X, [_ | Y]) :- enésimo(M, X, Y), N is M+1. Exemplos de utilização desse predicado são: ?-enésimo(3, X, [a, b, c, d]). X=c ?-enésimo(N, b, [a, b, c, d]). N=2

Seleção de Elementos Particulares Outra necessidade freqüente é reunir em um lista separada determinados elementos de uma lista, identificados pela sua posição. Isso é obtido pelo predicado seleciona/3, abaixo, que por sua vez emprega a relação enésimo/3:  seleciona([], _, []). seleciona([M | N], L, [X | Y]) :- enésimo(M, X, L), seleciona(N, L, Y). Por exemplo:  ?-seleciona([2, 4], [a, b, c, d, e], L). L=[b, d]

Soma e Produto soma([], 0). soma([X | Y], S) :- S is R+X, soma(Y, R). O somatório e o produtório de uma lista são dados respectivamente pelas relações soma/2 e produto/2 abaixo. Observe o artifício empregado na definição de produto/2, para garantir que o produtório de uma lista vazia seja zero.  soma([], 0). soma([X | Y], S) :- S is R+X, soma(Y, R).   produto([], 0). produto([X], X). produto(L, P) :- prod(L, P). prod([], 1). prod([X | Y], P) :- P is Q*X, prod(Y, Q).

Soma e Produto Exemplos dos predicados soma/2 e produto/2 são dados abaixo:   ?-soma([1, 2, 3, 4], X). X=10 ?-soma([1,2, X, 4], 10). X=3 ?-produto([], X). X=0 ?-produto([1, X, Y, 4], 24). X=1 Y=6; X=2 Y=3; X=3 Y=2; X=6 Y=1; Não