Upload
fisico28
View
102
Download
1
Embed Size (px)
Citation preview
Inteligência Artificial
PrologPrologObjetos EstruturadosObjetos Estruturados
� Objetos Estruturados� Listas� Recursão� Exercícios
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.
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).
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.
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).
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
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).
8
VariáveisVariáveis
� Cadeias de letras, dígitos e caracter _, sempre começando com maiúscula ou _
� Exemplos:� X� Mapa_da_mina� _nome
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
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
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
12
Objetos EstruturadosObjetos Estruturados
� Um funtor é definido por:� Nome – sintaxe é a mesma dos átomos� Aridade – corresponde ao número de
argumentos
data/2
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
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)
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?
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
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
18
ListasListas
� Busca Recursiva:� Qual a base da busca por um elemento em
uma lista?� E como faço a recursão?
19
ListasListas
� Base:pertence(X,[X|_]).
� Recursão:pertence(X,[_|Y]):-
pertence(X,Y).
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)
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
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
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.
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
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
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).
27
Controle de Retrocesso Controle de Retrocesso --BacktrackingBacktracking
�pertence_deterministico – encontra somente uma vez o elemento
� Como fica?
28
Controle de Retrocesso Controle de Retrocesso --BacktrackingBacktracking
�pertence_deterministico/2:
pertence_deterministico(Elem,[Elem|_]):-!.
pertence_deterministico(Elem,[_|Cauda]):-
pertence_deterministico (Elem,Cauda).
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)).
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.
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.
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).
33
ExercíciosExercícios
� Implementar as outras relações da nota didática – processamentos de listas
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