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.

Slides:



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

Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 13 Criado por Frederick H. Colclough, Colorado Technical University Recursão.
Concepção da linguagem, ou seja, porque e como ela é como é?
Listas Lineares Estrutura que permite representar um conjunto de dados de forma a preservar a relação de ordem linear. Uma lista linear é composta de nós,
REVISÃO– CONJUNTOS E FUNÇÕES Fabrício Dias
Estabilidade de Sistemas de Controle
Análise e Desenvolvimento de Sistemas Prof. Maria Salete M. G. Vaz.
Introdução à Programação Lógica
Introdução à Linguagem Prolog
Recursividade Conceitos e Aplicações.
Programação Lógica: PROLOG
O PLANO ap’ bp’ bp ap IG-UNICAMP© (B) (A)
5. Processamento de Listas
2. A Linguagem Prolog.
INF 1771 – Inteligência Artificial
INF 1771 – Inteligência Artificial
INF 1771 – Inteligência Artificial
INF 1771 – Inteligência Artificial
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.
Tipo Abstrato de Dados: Lista não ordenada
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.
Algoritmos em Grafos.
Prolog Programação Lógica Ícaro A. Souza.
Informática Teórica Engenharia da Computação
Aula Prática - Prolog Sistemas Inteligentes /~if684
Introdução à Programação
Prof. Natalia Castro Fernandes Engenharia de Telecomunicações – UFF 2º semestre/2012.
Comunicação Inclusiva Acessibilidade e Programação Web
Capítulo 14 Funções inversas slide 1
Programação I Aula 2 (Métodos)
Linguagens lógicas 2013 – Luiz Mauricio Nascimento Silva
Introdução a aplicativos Java
Capítulo 11 Programação Lógica
Recursão.
Haskell Programação Funcional
Uma Breve Introdução á programação lógica
INTRODUÇÃO À ANÁLISE COMBINATÓRIA
UNIDADE 2 UML MODELAGEM TEMPORAL
INF 1771 – Inteligência Artificial Edirlei Soares de Lima Aula 09 – Introdução ao Prolog.
Recursão Uma função é dita recursiva quando dentro do seu código existe uma chamada para si mesma Exemplo Cálculo do fatorial de um número:
Paradigma funcional.
Como elaborar um trabalho de pesquisa
Lógica para Computação
Métodos Formais.
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.
Lista Linear Base para outras estruturas
Programação Declarativa 2 INTRODUZIR REGRAS Relação X é descendente de Y (denotada pelo predicado offspring (X,Y)) Aproximação 1 (definição exaustiva)
Programação Lógica com Prolog
Aritmética Em Prolog podemos fazer uso de operadores aritméticos não lógicos pré-definidos pelo sistema, como por exemplo >, >=, +, *, -, etc. A interrogação.
Inteligência Artificial: A Linguagem Prolog (Parte 1)
Busca em Espaço de Estados Parte2 Algoritmos de Busca Cega
Busca em Espaço de Estados
Algoritmos e Programação
Engenharia/Ciência da Computação
Certificação e Auditoria
Lógica Aula 3.
tópicostópicos itens 01. Terminologia 02. Operações básicas 03. Representação de linguagens 04. Formalização de gramáticas 05. Processo de derivação 06.
Vinicius Ponte Machado
Estrutura de Dados Aula 3 - Listas
Estrutura de dados Pilhas e filas
Sistemas de Controle III N8SC3
Organização, Sistemas & Métodos Fluxogramas AULA 07
Funções Recursivas Leonardo Lucena – IFRN, 2011 Adaptação das Transparências de Graham Hutton (
Mostrando a vida numérica na aula
Inteligência Artificial Objetos em Prolog  Esta aula introduz objetos de dados simples e estruturados  Os tópicos abordados são:  Objetos simples (átomos,
Primeiro slide. segundo Terceiro slide.
Transcrição da apresentação:

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 fundamental em objetos

2 Relembrando: Unificação de Termos ?- data(D,M,2003) = data(D1,maio,A), data(D,M,2003) = data(15,maio,A1). D = 15 M = maio D1 = 15 A = 2003 A1 = 2003 ?- ponto(1,1) = X, A = ponto(4,Y), ponto(2,3) = ponto(2,Z). X = ponto(1,1) A = ponto(4,_G652) Y = _G652 Z = 3

3 Lembrando: Unificação – mais exemplos vertical( linha(ponto(X,Y), ponto(X,Z))). horizontal( linha(ponto(X,Y), ponto(Z,Y))). ?- vertical(linha(ponto(1,1),ponto(1,3))). yes ?- vertical(linha(ponto(1,1),ponto(3,2))). no ?-

4 Lembrando: Listas  Lista é uma das estruturas mais simples em Prolog, muito comum em programação não numérica  Ela é uma seqüência ordenada de elementos  Uma lista pode ter qualquer comprimento  Por exemplo uma lista de elementos tais como ana, tênis, pedro pode ser escrita em Prolog como:  [ana, tênis, pedro]

5 Lembrando: Unificação em Listas Lista1Lista2Lista1 = Lista2 [mesa][X|Y]X=mesa Y=[ ] [a,b,c,d][X,Y|Z]X=a Y=b Z=[c,d] [[ana,Y]|Z][[X,foi],[ao,cinema]]X=ana Y=foi Z=[[ao,cinema]] [ano,bissexto][X,Y|Z]X=ano Y=bissexto Z=[ ] [ano,bissexto][X,Y,Z]Não unifica

6 Operações em Listas  Frequentemente, é necessário realizar operações em listas, por exemplo, buscar um elemento que faz parte de uma lista  Para isso, a recursão é o recurso mais amplamente empregado  Para verificar se um elemento está na lista, é preciso verificar se ele está na cabeça ou se ele está na cauda da lista  Se o final da lista for atingido, o elemento não está na lista

7 Predicado de Pertinência  Inicialmente, é necessário definir o nome do predicado que verifica se um elemento pertence ou não a uma lista, por exemplo, pertence(X,Y)  A primeira condição especifica que um elemento X pertence à lista se ele está na cabeça dela. Isso é indicado como:  pertence(X,[X|Z]).  A segunda condição especifica que um elemento X pertence à lista se ele pertencer à sua cauda. Isso pode ser indicado como:  pertence(X,[W|Z]) :- pertence(X,Z).

8 Predicado de Pertinência  Sempre que um procedimento recursivo é definido, deve-se procurar pelas condições limites (ou condições de parada) e pelo caso recursivo:  pertence(Cabeca, [Cabeca|Cauda]).  pertence(Cabeca, [OutraCabeca|Cauda]) :- pertence(Cabeca,Cauda).  Após a definição do procedimento pertence/2, é possível interrogá-lo. Por exemplo, ?- pertence(a,[a,b,c]). yes

9 Predicado de Pertinência  ?- pertence(d,[a,b,c]). no  ?- pertence(X,[a,b,c]). X = a ; X = b ; X = c ; no  Entretanto, se as interrogações forem:  ?- pertence(a,X).  ?- pertence(X,Y).  deve-se observar que cada uma delas tem infinitas respostas, pois existem infinitas listas que validam essas interrogções para o procedimento pertence/2

10 Modo de Chamada de Predicados  Para documentar como um procedimento deve ser chamado, utiliza-se a notação (como comentário no programa):  + o argumento é de entrada (deve estar instanciado)  – o argumento é de saída (não deve estar instanciado)  ? o argumento é de entrada e saída (pode ou não estar instanciado)  O procedimento pertence/2 documentado com o modo de chamada é: % pertence(?Elemento, +Lista) pertence(E, [E|_]). pertence(E, [_|Cauda]) :- pertence(E,Cauda).

11 Exercícios  Definir o procedimento último(Elem,Lista) que encontra o último elemento Elem de uma lista Lista  O último elemento de uma lista que tem somente um elemento é o próprio elemento  O último elemento de uma lista que tem mais de um elemento é o ultimo elemento da cauda  Concatenar duas listas, formando uma terceira  Se o primeiro argumento é a lista vazia, então o segundo e terceiro argumentos devem ser o mesmo  Se o primeiro argumento é a lista não-vazia, então ela tem uma cabeça e uma cauda da forma [X|L1]; concatenar [X|L1] com uma segunda lista L2 resulta na lista [X|L3], onde L3 é a concatenação de L1 e L2  Defina uma nova versão do predicado último utilizando a concatenação de listas

12 Último Elemento de uma Lista  O último elemento de uma lista que tem somente um elemento é o próprio elemento ultimo(Elemento, [Elemento]).  O último elemento de uma lista que tem mais de um elemento é o ultimo elemento da cauda ultimo(Elemento, [Cabeca|Cauda]) :- ultimo(Elemento,Cauda).  Programa completo: % ultimo(?Elemento, +Lista) ultimo(Elemento, [Elemento]). ultimo(Elemento, [Cabeca|Cauda]) :- ultimo(Elemento,Cauda).

13 Concatenar Listas  Se o primeiro argumento é a lista vazia, então o segundo e terceiro argumentos devem ser o mesmo concatenar([ ],L,L).  Se o primeiro argumento é a lista não-vazia, então ela tem uma cabeça e uma cauda da forma [X|L1]; concatenar [X|L1] com uma segunda lista L2 resulta na lista [X|L3], onde L3 é a concatenação de L1 e L2 concatenar([X|L1],L2,[X|L3]) :- concatenar(L1,L2,L3).  Programa completo:  % concatenar(?/+L1,?/?L2,+/?L)  concatenar([ ],L,L).  concatenar([X|L1],L2,[X|L3]) :- concatenar(L1,L2,L3). XL1 L2 [X | L1] XL3 [X | L3]

14 99 Prolog Exercises  Site com 99 exercícios:  UNICAMP UNICAMP  Original Original

15 Slides baseados em: Bratko, I.; Prolog Programming for Artificial Intelligence, 3rd Edition, Pearson Education, Clocksin, W.F.; Mellish, C.S.; Programming in Prolog, 5th Edition, Springer-Verlag, Programas Prolog para o Processamento de Listas e Aplicações, Monard, M.C & Nicoletti, M.C., ICMC-USP, 1993 Material elaborado por José Augusto Baranauskas + adições de Maria Carolina Monard + adições de Solange Oliveira Rezende

16 Slides baseados em: Bratko, I.; Prolog Programming for Artificial Intelligence, 3rd Edition, Pearson Education, Clocksin, W.F.; Mellish, C.S.; Programming in Prolog, 5th Edition, Springer-Verlag, Programas Prolog para o Processamento de Listas e Aplicações, Monard, M.C & Nicoletti, M.C., ICMC-USP, 1993 Material elaborado por José Augusto Baranauskas + adições de Maria Carolina Monard + adições de Solange Oliveira Rezende