introdução à linguagem prolog
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 PresentationTRANSCRIPT
![Page 1: Introdução à Linguagem Prolog](https://reader036.vdocuments.com.br/reader036/viewer/2022082422/56812a56550346895d8dad2c/html5/thumbnails/1.jpg)
Introdução à Linguagem Prolog
Prof. Fabrício Enembreck
PPGIA – Programa de Pós Graduação em Informática Aplicada
![Page 2: Introdução à Linguagem Prolog](https://reader036.vdocuments.com.br/reader036/viewer/2022082422/56812a56550346895d8dad2c/html5/thumbnails/2.jpg)
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
![Page 3: Introdução à Linguagem Prolog](https://reader036.vdocuments.com.br/reader036/viewer/2022082422/56812a56550346895d8dad2c/html5/thumbnails/3.jpg)
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)
![Page 4: Introdução à Linguagem Prolog](https://reader036.vdocuments.com.br/reader036/viewer/2022082422/56812a56550346895d8dad2c/html5/thumbnails/4.jpg)
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
![Page 5: Introdução à Linguagem Prolog](https://reader036.vdocuments.com.br/reader036/viewer/2022082422/56812a56550346895d8dad2c/html5/thumbnails/5.jpg)
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’
![Page 6: Introdução à Linguagem Prolog](https://reader036.vdocuments.com.br/reader036/viewer/2022082422/56812a56550346895d8dad2c/html5/thumbnails/6.jpg)
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
![Page 7: Introdução à Linguagem Prolog](https://reader036.vdocuments.com.br/reader036/viewer/2022082422/56812a56550346895d8dad2c/html5/thumbnails/7.jpg)
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
![Page 8: Introdução à Linguagem Prolog](https://reader036.vdocuments.com.br/reader036/viewer/2022082422/56812a56550346895d8dad2c/html5/thumbnails/8.jpg)
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
![Page 9: Introdução à Linguagem Prolog](https://reader036.vdocuments.com.br/reader036/viewer/2022082422/56812a56550346895d8dad2c/html5/thumbnails/9.jpg)
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
![Page 10: Introdução à Linguagem Prolog](https://reader036.vdocuments.com.br/reader036/viewer/2022082422/56812a56550346895d8dad2c/html5/thumbnails/10.jpg)
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?
![Page 11: Introdução à Linguagem Prolog](https://reader036.vdocuments.com.br/reader036/viewer/2022082422/56812a56550346895d8dad2c/html5/thumbnails/11.jpg)
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).
![Page 12: Introdução à Linguagem Prolog](https://reader036.vdocuments.com.br/reader036/viewer/2022082422/56812a56550346895d8dad2c/html5/thumbnails/12.jpg)
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
![Page 13: Introdução à Linguagem Prolog](https://reader036.vdocuments.com.br/reader036/viewer/2022082422/56812a56550346895d8dad2c/html5/thumbnails/13.jpg)
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}
![Page 14: Introdução à Linguagem Prolog](https://reader036.vdocuments.com.br/reader036/viewer/2022082422/56812a56550346895d8dad2c/html5/thumbnails/14.jpg)
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.
![Page 15: Introdução à Linguagem Prolog](https://reader036.vdocuments.com.br/reader036/viewer/2022082422/56812a56550346895d8dad2c/html5/thumbnails/15.jpg)
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).
![Page 16: Introdução à Linguagem Prolog](https://reader036.vdocuments.com.br/reader036/viewer/2022082422/56812a56550346895d8dad2c/html5/thumbnails/16.jpg)
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))
![Page 17: Introdução à Linguagem Prolog](https://reader036.vdocuments.com.br/reader036/viewer/2022082422/56812a56550346895d8dad2c/html5/thumbnails/17.jpg)
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)
![Page 18: Introdução à Linguagem Prolog](https://reader036.vdocuments.com.br/reader036/viewer/2022082422/56812a56550346895d8dad2c/html5/thumbnails/18.jpg)
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)
![Page 19: Introdução à Linguagem Prolog](https://reader036.vdocuments.com.br/reader036/viewer/2022082422/56812a56550346895d8dad2c/html5/thumbnails/19.jpg)
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