Introdução à Linguagem Prolog

Preview:

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

Recommended