19
Introdução à Linguagem Prolog Prof. Fabrício Enembreck PPGIA – Programa de Pós Graduação em Informática Aplicada

Introdução à Linguagem Prolog

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

Page 1: Introdução à Linguagem Prolog

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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