Upload
quynn-nichols
View
24
Download
1
Embed Size (px)
DESCRIPTION
Introdução à Linguagem Prolog. Prof. Fabrício Enembreck PPGIA – Programa de Pós Graduação em Informática Aplicada. Conteúdo do Curso. Introdução à Lógica e à Programação Lógica Introdução ao Prolog e ao SWI-Prolog Matching e Backtraking Múltiplas soluções Listas e predicados recursivos - PowerPoint PPT Presentation
Citation preview
Introdução à Linguagem Prolog
Prof. Fabrício Enembreck
PPGIA – Programa de Pós Graduação em Informática Aplicada
Conteúdo do Curso
• Introdução à Lógica e à Programação Lógica
• Introdução ao Prolog e ao SWI-Prolog
• Matching e Backtraking
• Múltiplas soluções
• Listas e predicados recursivos
• Grafos em Prolog
Introdução ao Prolog
• Características– Provador de teoremas (Verdade ou Falso)– Linguagem declarativa– Linguagem não tipada– Linguagem é interpretada– Não determinístico– Diferente de programação procedimental (definição
lógica dos problemas)– Não existe variáveis globais– Muito usado em IA (rápida prototipação)
Da Notação de Kowalski para um programa Prolog
chama(a,b) usa(b,e) depende(x,y) chama(x,y)
depende(x,y) usa(x,y)
depende(x,y) chama(x,z), depende(z,y)
depende(a,e)
chama(a,b).
usa(b,e).
depende(X,Y) :- chama(X,Y).
depende(X,Y) :- usa(X,Y).
depende(X,Y) :- chama(X,Z), depende(Z,Y).
?- depende(a,e).
Notação de Kowalski Programa Prolog
Questionamento
Fato ouCláusula Unitária
Regra
Elementos da Linguagem - Átomos
• Definição: cadeias compostas pelos seguintes caracteres:– Letras Maiúsculas: A,..., Z– Letras Minúsculas: a,..., z– Dígitos: 0, 1,..., 9– Caracteres especiais: *, +, _, -, >, <, =, :, , ~
• Composição de Átomos:– Cadeias começando com letras minúsculas. Ex.: x_y,
maria, curso_de_IA– Cadeias de caracteres especiais. Ex.: <---->, ::=– Cadeias de caracteres entre apóstrofos. Ex.: ‘Maria’,
‘casa branca’, ‘a’
Elementos da Linguagem (cont.)
• Números: 1, 2.45, -20
• Variáveis: são cadeias de letras, dígitos e o caractere “_”. – Ex.: X, Mapa_da_mina, _nome
Programa Prolog
• Declaração de fatos (cláusulas unitárias)
• Declaração de regras
• Interrogação a respeito desses elementos
Fatos e regras denotam relações entre objetos
Programa Prolog (cont.)
• Estrutura de um fato
gosta(joao, maria).
• Estrutura de uma regra
gosta(joao, X) :-
gosta(X, vinho),
gosta(X, futebol).
Nome do predicado
Parâmetros
Conjunção
Questionamentos
• Dada a base de fatos:gosta(julio,peixe).gosta(julio,maria).gosta(maria,livro).gosta(joao,livro).
Quem gosta de livro??- gosta(X, livro).
Quem gosta de livro e chocolate??- gosta(X, livro), gosta(X, chocolate).
Quem gosta de livro ou chocolate??- gosta(X, livro); gosta(X, chocolate).
Disjunção
Introdução ao SWI-Prolog
• Utilização do Emacs para edição de programas
1. ?- emacs.2. Editar e salvar o programa:
gosta(julio,peixe).gosta(julio,maria).gosta(maria,livro).gosta(joao,livro).
3. Compilar o arquivo4. Realizar os questionamentos
Quem gosta de livro?Quem gosta de livro e chocolate?Quem gosta de livro ou chocolate?
Introdução ao SWI-Prolog (cont.)
• Operadores relacionais– X = Y X e Y são iguais;– X \= Y X e Y são diferentes;– X < Y X é menor que Y;– X > Y X é maior que Y;– X =< Y X é menor ou igual a Y;– X >= Y X é maior ou igual a Y.– X =:= Y X e Y são iguais (p/ números);– X =\= Y X e Y são diferentes (p/
números).
Introdução ao SWI-Prolog (cont.)
• Operadores aritméticos– X+Y soma de X e Y;– X – Y diferença de X e Y;– X * Y multiplicação de X por Y;– X / Y divisão de X por Y;– X mod Y resto da divisão de X por Y.
• Atribuição de valores numéricos “is”:?- X is 10 + 2.
• Negação de predicados:\+ não
Matching e Substituição
Exemplo:
1. chama(a,b) 2. usa(b,e) 3. depende(x,y) chama(x,y)
4. depende(x,y) usa(x,y)
5. depende(x,y) chama(x,z), depende(z,y)
6. depende(a,e) x, y e z são variáveis; “a”, “b” e “e” são átomos
chama(a,e) usa(a,e) chama(a,z), depende(z,e)
3 4 5
□2
depende(b,e)1 Θ={z/b}
chama(b,e) usa(b,e) chama(b,z), depende(z,e)
3 4 5Θ={x/b,y/e}
depende(a,e) Θ={x/a,y/e}
Matching e Substituição (cont.)
• O matching entre duas estruturas X e Y podem ocorrer em 4 situações
1. X é uma variável desinstanciada e Y está instanciado com um valor qualquer.
Ex: ?- X = a.
2. X e Y estão instanciados com o mesmo valor.
Ex.: ?- casa = casa.
Matching e Substituição (cont.)
3. X e Y não estão instanciados. Neste caso X e Y passam a ser a mesma variável.
Ex: ?- X = Y.
4. X e Y são estruturas com mesmo nome, número de parâmetros e uma das condições anteriores ocorre para todos os seus parâmetros.
Ex.: ?- anda(joao,bicicleta(caloi)) = anda(joao, X).
Verificando o matching entre elementos
• Verifique o resultado dos matchings?- pilota(A, londres) = pilota(londres,paris).
?- ponto(X,Y,Z) = ponto(X1,Y1,Z1).
?- letra(G) = palavra(letra).
?- num(alpha) = alpha.
?- ‘caixa’ = caixa.
?- f(X,X) = f(a,b).
?- f(X,a(b,c)) = f(Z,a(Z,c))
Exercícios
1- Implemente os seguintes programas Prolog– soma(X,Y,Z) (Z é o resultado da soma de X e Y) – maior(X,Y,Z) (Z é o maior entre X e Y)
– menor(X,Y,Z) (Z é o menor entre X e Y) – par(X) (é verdade se X é par e falso se X é ímpar) – impar(X) (é verdade se X é ímpar e falso se X é par)
Exercícios (cont.)
3- Declare uma base de fatos contendo várias cláusulas dos predicados a seguir relacionando pessoas da sua família:casado(X,Y) X é casado c/ Ypai(X, Y) X é pai de Y
4- A partir desses fatos crie os seguintes programas Prolog:
a) mae(X,Y) e) avo_(X,Y)b) irmao(X,Y) f) primo(X,Y)c) tio(X,Y) g) cunhado(X,Y)d) avo(X,Y)
Exercícios (cont.)
5- Dada a base de fatos a seguirgovernou(deodoro_da_fonseca,1891,1891).governou(floriano_peixoto,1891,1894).governou(prudente_de_moraes,1894,1898).governou(compos_sales,1898,1902).governou(rodrigues_alves,1902,1906).governou(afonso_pena,1906,1909).governou(nilo_pecanha,1909,1910).
Escreva um programa Prolog chamado “presidente” que deve encontrar a(s) pessoa(s) que governavam o Brasil em um ano determinado.Ex. 1: ?- presidente(X, 1892).
X = floriano_peixotoEx. 2: ?- presidente(X, 1891).
X = deodoro_da_fonseca ;X = floriano_peixoto ;
no