Elsa Carvalho 18 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Estruturas de.

Slides:



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

Lógica de Predicados e Representação de Conhecimento
DESENHO de BASE de DADOS RELACIONAL
Introdução à Programação uma Abordagem Funcional Programação I Prof.ª Claudia Boeres CT VII - Sala 34 Departamento de Informática Centro.
Programação em Lógica Programação em Lógica • Programas em Lógica
Elsa Carvalho 241 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Interpretação.
Elsa Carvalho 49 Universidade da Madeira Departamento de Matemática e Engenharias Programação em Lógica e Funcional (2000/01) (Actualizado em 2005/06)
Elsa Carvalho 163 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Teoria dos Modelos.
Elsa Carvalho 112 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Existe também.
Bases de Dados 2 José Júlio Alferes Departamento de Informática
TEORIA DOS AUTÓMATOS FINITOS E DAS SUAS LINGUAGENS
Programação Lógica ProLog
Introdução à Programação Lógica
Introdução à Linguagem Prolog
BCC101 – Matemática Discreta
Programação Lógica: PROLOG
Árvores e Árvores Binárias
SISTEMAS LINEARES I Prof. Marlon.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
5. Processamento de Listas
Instrutor: Nilo Menezes
Lógica para Computação
INF 1771 – Inteligência Artificial
INF 1771 – Inteligência Artificial
Elsa Carvalho 28 Universidade da Madeira Departamento de Matemática e Engenharias Programação em Lógica e Funcional (2000/01) (Actualizado em 2005/06)
Luís Rodrigues – Universidade dos Açores
Informática Teórica Engenharia da Computação
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)
Vinicius Ponte Machado
Sintaxe e Semântica do PROLOG.
Aula Prática - Prolog Sistemas Inteligentes /~if684
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.
Aula Prática - Prolog Sistemas Inteligentes /~if684
Listas: Haskell x Prolog
Linguagens lógicas 2013 – Luiz Mauricio Nascimento Silva
Capítulo 11 Programação Lógica
Conjuntos (continuação)
Implementação de Resolução
Linguagem Funcional 2 Linguagem Funcional 2 - LF2 Estende LF1 com funções de alta ordem Uma função passa a ser um valor O contexto inclui um único componente:
Uma Breve Introdução á programação lógica
Linguagem de Programação JAVA
Família de palavras. Família de palavras pedra pedrada pedreiro pedregulho Uma família de palavras é um conjunto de palavras que têm uma parte comum.
André Luiz da Costa Carvalho
Elsa Carvalho 186 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Aplicação e Composição.
LEMA 1 Utilização de material concreto no Ensino de Matemática
Estruturas de Dados Aula 15: Árvores
Lógica para Computação
94 Elsa Carvalho Universidade da Madeira Departamento de Matemática e Engenharias Programação em Lógica e Funcional (2000/01) (Actualizado em 2005/06)
INE Fundamentos de Matemática Discreta para a Computação
Programação Lógica com Prolog
Inteligência Artificial: A Linguagem Prolog (Parte 1)
Elsa Carvalho 262 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Negação Com os.
Noções de lisp Lisp: LISp Processing J.M.Barreto INE-CTC-UFSC.
Elsa Carvalho BEGIN  := id; b:=true; S:=[,..., ] WHILE (S  AND b)DO := top(S); S:=pop(S); := ; IF s e v são da forma f(t 1,... t n ), g(r 1,..., r m.
Relações 1.
Elsa Carvalho 1 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Conceitos Prolog.
Elsa Carvalho 203 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Resolução (com.
Elsa Carvalho 18 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Programação recursiva.
Prolog - 1 Prolog m Prolog concretiza o modelo de computação abstracto da Programação em Lógica q escolher o golo mais à esquerda na resolvente q (em vez.
Métodos Formais Juan Andrés Mussini.
BCC101 – Matemática Discreta
Engenharia/Ciência da Computação
Vinicius Ponte Machado
Estrutura de Dados Aula 3 - Listas
Prof. Daniel Morais dos Reis
Árvores e Árvores Binárias
Equações de primeiro grau com uma variável.
Inteligência Artificial Objetos em Prolog  Esta aula introduz objetos de dados simples e estruturados  Os tópicos abordados são:  Unificação como operação.
Funções de Alta Ordem Leonardo Lucena – IFRN, 2011 Adaptação das Transparências de Graham Hutton (
Transcrição da apresentação:

Elsa Carvalho 18 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Estruturas de Dados em Prolog Em Prolog não existem estruturas de dados pré-definidas como nas linguagens convencionais. No entanto podemos simular as tradicionais estruturas de dados através de composição de termos Prolog chamados funções. Tipicamente utilizam-se estruturas binárias para este fim como é o caso das listas.

Elsa Carvalho 19 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Listas Tradicionalmente uma lista é representada pelo termo (X, Y) em que X é um elemento e Y o resto da lista. nil denomina a lista vazia. Em Prolog usa-se uma notação mais conveniente: uma lista é o termo [X|Y] em que X é o primeiro elemento e Y é o resto da lista. Por analogia com as linguagens funcionais podemos dizer que X é a cabeça da lista e Y é a cauda. A lista vazia representa-se como [ ]. Termos equivalentes (a, nil)[a] (a, (b,nil))[a,b] (a, (b,X))[a,b|X]

Elsa Carvalho 20 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Listas Podemos definir lista como list([]). list([X|Xs]) :- list(Xs). Ao contrário das linguagens funcionais, em Prolog uma lista é um objecto polimórfico. Isto é, podemos ter listas com objectos de diferentes tipos. Por exemplo: [a, 1, ana, 5.32, [b,c], X, 6, [1, [2,3], 4], fim]

Elsa Carvalho 21 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Listas e Unificação Uma lista com um só elemento: [X] A unificação de[X | Xs] = [1, 2, 3, 4] resulta emX = 1 e Xs = [2, 3, 4] Lista com 3 elementos: [X, Y, Z] Uma lista não vazia: [X | _ ]porque [] não unifica com [X | _ ] A unificação de[X, Y | Ys] = [1, 2, 3, 4, 5, 6] resulta emX = 1, Y =2 e Ys = [3, 4, 5, 6]

Elsa Carvalho 22 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Predicados para manipular listas Determinar se um elemento é membro de uma lista (member). member(X, [X|_ ]). member(X, [ _|Ys]) :- member(X, Ys). Diferentes usos de member: ?member(3, [1,2,3,4,5]) ou seja, verificar se um dado elemento é membro de uma lista. ?member(W, [1,2]) ou seja, perguntar quais são os membros de uma lista. Desenhe as árvores de pesquisa para cada uma das interrogações colocadas, utilizando a definição de member.

Elsa Carvalho 23 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Predicados para manipular listas Juntar uma lista com outra e obter uma terceira (append). append([ ], Ys, Ys). append([X | Xs], Ys, [X | Zs]) :- append(Xs, Ys, Zs). Desenhe a árvore de pesquisa para responder à interrogação ?append([1,2], [4,5,6], W) Outros usos de append Encontrar diferenças entre listas. Por exemplo ?append(Xs, [3,4], [1,2,3,4]). dá como resposta Xs = [1,2]

Elsa Carvalho 24 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Predicados para manipular listas Outros usos de append (cont.) Partir uma lista em duas sub-listas: ?append(Xs, Ys, [1,2,3,4]). obtemos várias respostas como por exemplo Xs=[1,2], Ys=[3,4]. Podemos também utilizar append para definir outros predicados: adjacente, que expressa que dois elementos X e Y são adjacentes numa lista Zs: adjacente(X, Y, Zs) :- append( _, [X,Y|_ ], Zs). last, que expressa que um elemento é o último elemento da lista: last(X, Xs) :- append( _, [X], Xs).

Elsa Carvalho 25 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Exercícios Defina os seguintes predicados de manipulação de listas: prefixo(Xs, Ys): que é verdadeiro se Xs é uma sub-lista inicial de Ys. Por exemplo, prefixo([a,b], [a,b,c]) é verdadeiro. sufixo(Xs, Ys): que é verdadeiro se Xs é uma sub-lista terminal de Ys. Por exemplo, sufixo([b,c], [a,b,c] é verdadeiro. sublista(Xs, Ys): que é verdadeiro se Xs é uma sub-lista de Ys. De notar que uma sub-lista necessita que os elementos sejam consecutivos, ou seja, [b,c] é uma sub-lista de [a,b,c,d] enquanto que [a,c] não é.

Elsa Carvalho 26 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Exercícios Resolução: prefixo([ ], Ys). prefixo([X|Xs], [X|Ys]) :- prefixo(Xs, Ys). sufixo(Xs, Xs). sufixo(Xs, [Y|Ys]) :- sufixo(Xs, Ys). a)Sub-lista como um sufixo de um prefixo sublista(Xs, Ys) :- prefixo(Ps, Ys), sufixo(Xs, Ps). b)Sub-lista como um prefixo de um sufixo sublista(Xs,Ys) :- sufixo(Ss, Ys), prefixo(Xs, Ss).

Elsa Carvalho 27 Universidade da Madeira Departamento de Matemática Programação em Lógica e Funcional (2000/01) (Actualizado em 2004/05) Exercícios Resolução: c)Definição recursiva de sub-lista sublista(Xs, Ys) :- prefixo(Xs, Ys). sublista(Xs, [Y|Ys]) :- sublista(Xs, Ys). d)Sufixo de um prefixo, usando o append sublista(Xs, AsXsBs) :- append(As, XsBs, AsXsBs), append(Xs, Bs, XsBs). d)Prefixo de um sufixo, usando o append sublista(Xs, AsXsBs) :- append(AsXs, Bs, AsXsBs), append(As, Xs, AsXs).