Anda di halaman 1dari 34

Prolog Objetos Estruturados

Objetos Estruturados Listas Recurso Exerccios

Inteligncia Artificial

Exerccios
Relembrando a introduo:
Exerccios pgs 22 e 23 Livro Palazzo
introducaoProgramacaoProlog_Palazzo.pdf 1.

Escreva um programa Prolog para representar:

Joo nasceu em Pelotas e Jean nasceu em Paris. Pelotas fica no Rio Grande do Sul. Paris fica na Frana. S gacho quem nasceu no Rio Grande do Sul.
2

Exerccios
1.

Resposta:

nasceu(joo,pelotas). nasceu(jean,paris). local(paris,franca). local(pelotas,rio_grande_do_sul). gaucho(X):nasceu(X,Cidade), local(Cidade, rio_grande_do_sul).


3

Exerccios
2.

Escreva um programa Prolog para representar:

Os corpos celeste dignos de nota so as estrelas, os planetas e os cometas. Vnus um corpo celeste, mas no uma estrela. Os cometas possuem cauda quando esto perto do sol. Vnus est perto do sol, mas no possui cauda.
4

Exerccios
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 instncia 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).

Exerccios
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 B E 2
3 2 A 4 C
6

5 4

D 5 F

Exerccios
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).
7

Variveis
Cadeias de letras, dgitos e caracter _, sempre comeando com maiscula ou _ Exemplos:
X Mapa_da_mina _nome

Objetos Estruturados
Objetos de dados com vrios componentes, podendo ser, cada um deles, por sua vez, uma estrutura Todas os objetos estruturados em Prolog so rvores tomo: rvore somente com raiz

Objetos Estruturados
Exemplo:
Data estrutura com trs componentes: dia, ms e ano

termo data data(7,julho,1953) 7 julho 1953 termo

10

Objetos Estruturados
data(7,julho,1953) Pode ser visto com um fato Como objeto estruturado, data(7,julho,1953) apresentado como um argumento em uma relao
data deixa de ser uma relao e passa a ser um funtor

11

Objetos Estruturados
Um funtor definido por:
Nome sintaxe a mesma dos tomos Aridade corresponde ao nmero de argumentos data/2

12

Listas
Uma das estruturas mais simples em Prolog Seqncia ordenada de elementos Pode ter qualquer comprimento Ordenada: ordem dos elementos na seqncia importante Todos os objetos em Prolog so rvores
Listas no fogem regra
13

Listas
Funtor de lista: . Argumentos: Cabea e Cauda
.(Cabea,Cauda)

Cauda, por sua vez uma lista


Vazia OU Tem sua Cabea e Cauda
14

Listas
Lista [gosto,de,vinho] [[3],5,[2,7]] [X,Y|Z] [[c,gato]] Cabea gosto [3] X [c,gato] Cauda [de,vinho] [5,[2,7]] [Y|Z] []

Colchetes: melhoria notacional Listas representadas por rvores Como fica a representao das listas ao lado?

15

Listas
Operao envolvendo termos: unificao Dados dois termos, eles se unificam se:
So idnticos OU As variveis em ambos os termos podem ser instanciadas em objetos, de maneira que aps a substituio das variveis por esses objetos, os termos se tornam idnticos

16

Listas
Unificao de [X|Y] X,Y variveis com [a1, a2, a3, ..., an]

Substituio: {X/a1,Y/[a2,a3,...,an]} se n>1 {X/a1,Y/[]} se n=1


17

Listas
Busca Recursiva:
Qual a base da busca por um elemento em uma lista? E como fao a recurso?

18

Listas
Base: pertence(X,[X|_]). Recurso: pertence(X,[_|Y]):pertence(X,Y).

19

Controle de Retrocesso Backtracking


Prolog: retrocesso automtico Poderoso recurso de programao o programador no precisa explicitar o retrocesso s vezes, necessrio prevenir
Uso do ! (corte)

20

Controle de Retrocesso Backtracking


Objetivos do uso do !:
Tornar o programa mais rpido Fazer com que o programa ocupe menos espao na memria

21

Controle de Retrocesso Backtracking


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

22

Controle de Retrocesso Backtracking


Resposta:
f(X,0):-X < 3. f(X,2):-3 =< X, X > 6. f(X,4):-6 =< X. % verso 1

Interrogar Prolog:
?-f(1,Y),2<Y.

23

Controle de Retrocesso Backtracking se removido, no altera resultado


Usando corte verde:
f(X,0):-X < 3,!. f(X,2):-3 =< X, X > 6,!. f(X,4):-6 =< X. % verso 2

Interrogar Prolog:
?-f(1,Y),2<Y.

24

Controle de Retrocesso Backtracking se removido, altera resultado


Usando corte vermelho:
f(X,0):-X < 3,!. f(X,2):-X > 6,!. f(X,4):-6 =< X. % verso 3

Interrogar Prolog:
?-f(1,Y),2<Y.

25

Controle de Retrocesso Backtracking


pertence no-determinstico encontra todas as ocorrncias de um elemento
pertence(X,[X|_]). pertence(X,[_|Y]):pertence(X,Y).

26

Controle de Retrocesso Backtracking


pertence_deterministico encontra somente uma vez o elemento Como fica?

27

Controle de Retrocesso Backtracking


pertence_deterministico/2:

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

28

Exerccios
Quais das prximas operaes de unificao sero bem sucedidas e quais iro falhar? Para as que forem bem sucedidas, quais so as instanciaes de variveis 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)).

29

Exerccios
Supondo que um retngulo seja representado pelo termo: retngulo(SupEsq, InfDir) onde SupEsq representa o ponto superior esquerdo e InfDir o ponto inferior direito de um retngulo em uma tela de vdeo (1280 x 1024). Defina a relao quadrado(R, ...) que verdadeira se R um quadrado.
30

Exerccios
Resposta:
%quadrado(retangulo(PontoSuperiorEsquerdo, % PontoInferiorDireito)). quadrado(retangulo(ponto(X1,Y1),ponto(X2,Y2))):Comp1 is X2 - X1, Comp2 is Y2 - Y1, Comp1 == Comp2.

31

Exerccios
Considere o seguinte programa: f(1, um). f(s(1), dois). f(s(s(1))), trs). f(s(s(s(X))), N) :- f(X, N). Como iria o sistema Prolog responder as seguintes questes? Quando vrias respostas so possveis, d pelo menos duas: ?-f(s(1), A). ?-f(s(s(1)), dois). ?-f(s(s(s(s(s(s(1)))))), C). ?-f(D, trs).

32

Exerccios
Implementar as outras relaes da nota didtica processamentos de listas

33

Fonte
Monard, M.C.; Nicoletti, M.C. Programas Prolog para processamento de listas e aplicaes. Notas Didticas do ICMC-USP, N. 07, 1993, 75pg.
ftp://ftp.icmc.sc.usp.br/pub/BIBLIOTECA/not_did/listas-prolog.pdf

Material baseado em slides de Jos Augusto Baranauskas USP-Ribeiro Preto

34

Anda mungkin juga menyukai