34
Inteligência Artificial Prolog Prolog Objetos Estruturados Objetos Estruturados Objetos Estruturados Listas Recursão Exercícios

Prolog_Objetos_Estruturados

Embed Size (px)

Citation preview

Page 1: Prolog_Objetos_Estruturados

Inteligência Artificial

PrologPrologObjetos EstruturadosObjetos Estruturados

� Objetos Estruturados� Listas� Recursão� Exercícios

Page 2: Prolog_Objetos_Estruturados

2

ExercíciosExercícios

� Relembrando a introdução:� Exercícios pgs 22 e 23 – Livro PalazzointroducaoProgramacaoProlog_Palazzo.pdf

1. Escreva um programa Prolog para representar:

João nasceu em Pelotas e Jean nasceu em Paris.

Pelotas fica no Rio Grande do Sul.

Paris fica na França.

Só é gaúcho quem nasceu no Rio Grande do Sul.

Page 3: Prolog_Objetos_Estruturados

3

ExercíciosExercícios

1. Resposta:

nasceu(joão,pelotas).

nasceu(jean,paris).

local(paris,franca).

local(pelotas,rio_grande_do_sul).

gaucho(X):-

nasceu(X,Cidade),

local(Cidade, rio_grande_do_sul).

Page 4: Prolog_Objetos_Estruturados

4

ExercíciosExercícios

2. Escreva um programa Prolog para representar:

Os corpos celeste dignos de nota são as estrelas,

os planetas e os cometas.

Vênus é um corpo celeste, mas não é uma estrela.

Os cometas possuem cauda quando estão perto do

sol.

Vênus está perto do sol, mas não possui cauda.

Page 5: Prolog_Objetos_Estruturados

5

ExercíciosExercícios

2. Resposta:

corpo_celeste(estrela).

corpo_celeste(planeta).

corpo_celeste(cometa).

corpo_celeste(asteroide).

digno_de_nota(Corpo_Celeste):-

corpo_celeste(Corpo_Celeste),

(Corpo_Celeste == estrela ;

Corpo_Celeste == planeta;

Corpo_Celeste == cometa).

%Programa que deve ser criado: tipo/2 –

%tipo(Instancia_Corpo_Celeste, X).

% + <arg1>: uma instância de um corpo

% celeste

% - <arg2>: o tipo do corpo celeste

tipo(venus,X):-

corpo_celeste(X),

X \= estrela,

esta_perto_sol(venus),

not(possui_cauda(venus,X)),!.

possui_cauda(X,Y):-

esta_perto_sol(X),

Y == cometa.

esta_perto_sol(venus).

Page 6: Prolog_Objetos_Estruturados

6

ExercíciosExercícios

3. Assuma que arcos em um grafo dirigido representam custos e sejam descritos como arco(R,S,T), significando que há um arco de custo T entre R e S. Defina custo(U,V,L) – existe um caminho de custo L entre U e V

A

B

D

CF

E3 2

5

4 4

2

2

5

Page 7: Prolog_Objetos_Estruturados

7

ExercíciosExercícios

3. Resposta: arco(a,b,3).

arco(b,d,2).

arco(a,d,5).

arco(a,c,4).

arco(c,d,4).

arco(c,f,5).

arco(d,e,2).

arco(e,f,2).

mais(X,Y,Z):-

Z is X + Y.

custo(X,Y,T):-

arco(X,Y,T),!.

custo(X,Y,T):-

arco(X,Z,T1),!,

custo(Z,Y,T2),

mais(T1,T2,T).

Page 8: Prolog_Objetos_Estruturados

8

VariáveisVariáveis

� Cadeias de letras, dígitos e caracter _, sempre começando com maiúscula ou _

� Exemplos:� X� Mapa_da_mina� _nome

Page 9: Prolog_Objetos_Estruturados

9

Objetos EstruturadosObjetos Estruturados

� Objetos de dados com vários componentes, podendo ser, cada um deles, por sua vez, uma estrutura

� Todas os objetos estruturados em Prolog são árvores

� Átomo: árvore somente com raiz

Page 10: Prolog_Objetos_Estruturados

10

Objetos EstruturadosObjetos Estruturados

� Exemplo:� Data – estrutura com três componentes: dia,

mês e ano

data

7 julho 1953data(7,julho,1953)

termo

termo

Page 11: Prolog_Objetos_Estruturados

11

Objetos EstruturadosObjetos Estruturados

data(7,julho,1953)

� Pode ser visto com um fato� Como objeto estruturado, data(7,julho,1953) é apresentado como um argumento em uma relação� data deixa de ser uma relação e passa a ser

um funtor

Page 12: Prolog_Objetos_Estruturados

12

Objetos EstruturadosObjetos Estruturados

� Um funtor é definido por:� Nome – sintaxe é a mesma dos átomos� Aridade – corresponde ao número de

argumentos

data/2

Page 13: Prolog_Objetos_Estruturados

13

ListasListas

� Uma das estruturas mais simples em Prolog

� Seqüência ordenada de elementos� Pode ter qualquer comprimento� Ordenada: ordem dos elementos na

seqüência é importante� Todos os objetos em Prolog são árvores

� Listas não fogem à regra

Page 14: Prolog_Objetos_Estruturados

14

ListasListas

� Funtor de lista: .� Argumentos: Cabeça e Cauda

� Cauda, por sua vez é uma lista� Vazia OU� Tem sua Cabeça e Cauda

.(Cabeça,Cauda)

Page 15: Prolog_Objetos_Estruturados

15

ListasListas

Lista Cabeça Cauda

[gosto,de,vinho] gosto [de,vinho]

[[3],5,[2,7]] [3] [5,[2,7]]

[X,Y|Z] X [Y|Z]

[[c,gato]] [c,gato] []

� Colchetes: melhoria notacional

� Listas representadas por árvores

� Como fica a representação das listas ao lado?

Page 16: Prolog_Objetos_Estruturados

16

ListasListas

� Operação envolvendo termos: unificação� Dados dois termos, eles se unificam se:

� São idênticos OU� As variáveis em ambos os termos podem ser

instanciadas em objetos, de maneira que após a substituição das variáveis por esses objetos, os termos se tornam idênticos

Page 17: Prolog_Objetos_Estruturados

17

ListasListas

Unificação de [X|Y] – X,Y variáveiscom

[a1, a2, a3, ..., an]

Substituição:{X/a1,Y/[a2,a3,...,an]} se n>1

{X/a1,Y/[]} se n=1

Page 18: Prolog_Objetos_Estruturados

18

ListasListas

� Busca Recursiva:� Qual a base da busca por um elemento em

uma lista?� E como faço a recursão?

Page 19: Prolog_Objetos_Estruturados

19

ListasListas

� Base:pertence(X,[X|_]).

� Recursão:pertence(X,[_|Y]):-

pertence(X,Y).

Page 20: Prolog_Objetos_Estruturados

20

Controle de Retrocesso Controle de Retrocesso --BacktrackingBacktracking

� Prolog: retrocesso automático� Poderoso recurso de programação – o

programador não precisa explicitar o retrocesso

� Às vezes, é necessário prevenir� Uso do ! (corte)

Page 21: Prolog_Objetos_Estruturados

21

Controle de Retrocesso Controle de Retrocesso --BacktrackingBacktracking

� Objetivos do uso do !:� Tornar o programa mais rápido� Fazer com que o programa ocupe menos

espaço na memória

Page 22: Prolog_Objetos_Estruturados

22

Controle de Retrocesso Controle de Retrocesso --BacktrackingBacktracking

� Exemplo de uso:

� f(x) = 0 se x < 3� f(x) = 2 se x ≥ 3 ou x < 6� f(x) = 4 se x ≥ 6

� Implementar em Prolog

Page 23: Prolog_Objetos_Estruturados

23

Controle de Retrocesso Controle de Retrocesso --BacktrackingBacktracking

� Resposta:

� Interrogar Prolog:

f(X,0):-X < 3. % versão 1

f(X,2):-3 =< X, X > 6.

f(X,4):-6 =< X.

?-f(1,Y),2<Y.

Page 24: Prolog_Objetos_Estruturados

24

Controle de Retrocesso Controle de Retrocesso --BacktrackingBacktracking

� Usando corte verde:

� Interrogar Prolog:

f(X,0):-X < 3,!. % versão 2

f(X,2):-3 =< X, X > 6,!.

f(X,4):-6 =< X.

?-f(1,Y),2<Y.

se removido, não altera resultado

Page 25: Prolog_Objetos_Estruturados

25

Controle de Retrocesso Controle de Retrocesso --BacktrackingBacktracking

� Usando corte vermelho:

� Interrogar Prolog:

f(X,0):-X < 3,!. % versão 3

f(X,2):-X > 6,!.

f(X,4):-6 =< X.

?-f(1,Y),2<Y.

se removido, altera resultado

Page 26: Prolog_Objetos_Estruturados

26

Controle de Retrocesso Controle de Retrocesso --BacktrackingBacktracking

�pertence – não-determinístico – encontra todas as ocorrências de um elemento

pertence(X,[X|_]).

pertence(X,[_|Y]):-

pertence(X,Y).

Page 27: Prolog_Objetos_Estruturados

27

Controle de Retrocesso Controle de Retrocesso --BacktrackingBacktracking

�pertence_deterministico – encontra somente uma vez o elemento

� Como fica?

Page 28: Prolog_Objetos_Estruturados

28

Controle de Retrocesso Controle de Retrocesso --BacktrackingBacktracking

�pertence_deterministico/2:

pertence_deterministico(Elem,[Elem|_]):-!.

pertence_deterministico(Elem,[_|Cauda]):-

pertence_deterministico (Elem,Cauda).

Page 29: Prolog_Objetos_Estruturados

29

ExercíciosExercícios

� Quais das próximas operações de unificação serão bem sucedidas e quais irão falhar? Para as que forem bem sucedidas, quais são as instanciações de variáveis resultantes?

ponto(A, B) = ponto(1, 2).ponto(A, B) = ponto(X, Y, Z).mais(2, 2) = 4.+(2, D) = +(E, 2).t(p(-1,0), P2, P3) =

t(P1, p(1, 0), p(0, Y)).

Page 30: Prolog_Objetos_Estruturados

30

ExercíciosExercícios

Supondo que um retângulo seja representado pelo termo:

retângulo(SupEsq, InfDir)

onde SupEsq representa o ponto superior esquerdo e InfDir o ponto inferior direito de um retângulo em uma tela de vídeo (1280 x 1024). Defina a relação

quadrado(R, ...)

que é verdadeira se R é um quadrado.

Page 31: Prolog_Objetos_Estruturados

31

ExercíciosExercícios

� Resposta:

%quadrado(retangulo(PontoSuperiorEsquerdo,

% PontoInferiorDireito)).

quadrado(retangulo(ponto(X1,Y1),ponto(X2,Y2))):-

Comp1 is X2 - X1,

Comp2 is Y2 - Y1,

Comp1 == Comp2.

Page 32: Prolog_Objetos_Estruturados

32

ExercíciosExercícios

� Considere o seguinte programa:

f(1, um).

f(s(1), dois).

f(s(s(1))), três).

f(s(s(s(X))), N) :- f(X, N).

� Como iria o sistema Prolog responder as seguintes questões? Quando várias respostas são possíveis, dê pelo menos duas:?-f(s(1), A).?-f(s(s(1)), dois).?-f(s(s(s(s(s(s(1)))))), C).?-f(D, três).

Page 33: Prolog_Objetos_Estruturados

33

ExercíciosExercícios

� Implementar as outras relações da nota didática – processamentos de listas

Page 34: Prolog_Objetos_Estruturados

34

FonteFonte

Monard, M.C.; Nicoletti, M.C. Programas Prolog para

processamento de listas e aplicações. Notas Didáticas do

ICMC-USP, N. 07, 1993, 75pg.

ftp://ftp.icmc.sc.usp.br/pub/BIBLIOTECA/not_did/listas-prolog.pdf

Material baseado em slides deJosé Augusto Baranauskas

USP-Ribeirão Preto