Buscar

Prolog Objetos Simples (Slide 2)

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 24 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 24 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 24 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Avisos
• Hoje é o	último dia para	entregar foto selfie;
• Dia 15/08	é feriado (Padroeira de	São	Carlos)	
portanto não haverá aula;
• Devido à SEMCOMP	a	aula	do	dia 18/08	será
substituída por uma atividade que será postada
no	TIDIA	4.0.
– Você deve escolher uma atividade da	SEMCOMP	que
participou,	escrever um	breve	resumo do	que foi
apresentado e	como você pode relacionar essa
atividade com	InteligênciaArtificial.
• Dia 22/08	será nossa próxima aula	em sala.
Aula	Passada
2
5
1
8 8
10
6
5
1
2
1 1
2
1 1 1
0 1 2 3 4 5 6 8 9 11 12 13 14 15 17 26
RESULTADO	DO	EXERCÍCIO	 PARA	MANTER	O	FOCO
Recuperações	de	foco
Mediana: 5
Média: 6.02
Desvio Padrão: 4.75
Aula	Passada
• Programação	Lógica
– Algoritmo	=	Lógica	+	Controle
– Programa	=	Lógica	+	Controle	+	Estruturas	de	
Dados
• Programar	em	Prolog	envolve:
– declarar	alguns	fatos a	respeito	de	objetos e	
seus	relacionamentos
– definir	algumas	regras sobre	os	objetos e	seus	
relacionamentos	e
– fazer	perguntas sobre	os	objetos e	seus	
relacionamentos
Aula	Passada
• Controle	de	programa
– Ordenar	cláusulas	e	metas
– Uso	da	busca	em	profundidade
– Operadores	E	(,)	e	OU	(;)
– Evite	o	uso	de	OU	(;)	(por	quê?)
– Backtracking
– Corte	(!)
– Cuidado	ao	utilizar
– Corte	verde	e	vermelho
– Significado	do	corte.	
p	:- a,!,b.	
p	:- c.
Objetos	em	Prolog
Solange	Rezende
§Esta	aula	introduz	objetos	de	dados	simples	
e	estruturados
§Os	tópicos	abordados	são:
§Objetos	simples	(átomos,	números,	variáveis)
§Objetos	estruturados
§Unificação	como	operação	fundamental	em	
objetos
Objetos	em	Prolog
Objetos	
(Termos)
Objetos	
Simples
Constantes	
(Atômicos)
Átomos Números
Variáveis
Estruturas
Átomos
• São cadeias compostas pelos seguintes 
caracteres:
– letras maiúsculas: A, B, ..., Z
– letras minúsculas: a, b, ..., z
– dígitos: 0, 1, ..., 9
– caracteres especiais: + - * / < > = : . & _ ~
• Podem ser construídos de três maneiras:
– cadeias de letras, dígitos e o caractere ‘_’, começando 
com uma letra minúscula: anna, nil, x25, x_25, 
x_25AB, x_, x__y, tem_filhos, tem_um_filho
– cadeias de caracteres especiais: <--->, =====>, ..., 
.:., ::=
– cadeias de caracteres entre apóstrofos: ‘Abraão’, 
‘América_do_Sul’, ‘América_Latina’
Números
• Números	usados	em	Prolog	incluem	
números	inteiros	e	números	reais
Operadores Aritméticos
Predicado pré-definido is
adição +
subtração -
multiplicação *
divisão /
divisão inteira //
resto divisão inteira mod
potência **
atribuição is
Operadores Relacionais
X > Y X é maior do que Y
X < Y X é menor do que Y
X >= Y X é maior ou igual a Y
X =< Y X é menor ou igual a Y
X =:= Y X é igual a Y
X = Y X unifica com Y
X =\= Y X é diferente de Y
Números
• O	operador	= tenta	unificar	apenas
– ?- X = 1 + 2.
X = 1 + 2
• O	operador	is força	a	avaliação	aritmética
– ?- X is 1 + 2.
X = 3
• Se	a	variável	à	esquerda	do	operador	is já	
estiver	instanciada,	Prolog	apenas	compara	
o	valor	da	variável	com	o	resultado	da	
expressão	à	direita	de	is
– ?- X = 3, X is 1 + 2.
X = 3
– ?- X = 5, X is 1 + 2.
no
Comparação:	Aritmética	e	Prolog
2	+	3	=	5
3	x	4	=	12
5	– 3	=	2
3	– 5	=		-2
4	: 2	=	2
1	é	o	resto	quando	7	é	
dividido	por	2
?- 5	is	2+3.
?- 12	is	3∗4.
?- 2	is	5-3.
?- -2	is	3-5.
?- 2	is	4/2.
?- 1	is	mod(7,2).
Aritmética Prolog
Exemplos	com	o	predicado	is
?- 10	is	5+5.
yes
?- 4	is	2+3.
no
?- X	is	3	∗ 4.
X=12
yes
?- R	is	mod(7,2).
R=1
yes
Usando	o	operador	=	(unificação)
?- X	=	3	+	2.
X	=	3+2
yes
?- 3	+	2	=	X.
X	=	3+2
yes
?-
Usando	o	predicado	is/2
?- X	is	3	+	2.
X	=	5
yes
?- 3	+	2	is	X.
ERROR:	is/2:	Argumentos	não	estão	instanciados	
corretamente
?- Resultado	is	2+2+2+2+2.
Resultado	=	10
yes
?-
Definição	de	Predicados	Aritméticos
ad-tres-e-dobra(X,	Y):-
Y	is	(X+3)	∗ 2.
Definição	de	Predicados	Aritméticos
ad-tres-e-dobra(X,	Y):-
Y	is	(X+3)	∗ 2.
?- ad-tres-e-dobra	(1,X).
X=8
yes
?- ad-tres-e-dobra	(2,X).
X=10
yes
Variáveis
• São	cadeias	de	letras,	dígitos	e	caracteres	
‘_’,	sempre	começando	com	letra	maiúscula	
ou	com	o	caractere	‘_’
– X,	Resultado,	Objeto3,	Lista_Alunos,	ListaCompras,	
_x25,	_32
• O	escopo	de	uma	variável	é	local,	ou	seja,	
é	dentro	de	uma	mesma	regra	ou	dentro	de	
uma	pergunta
– Isto	significa	que	se	a	variável	X	ocorre	em	duas	
regras/perguntas,	então	são	duas	variáveis	distintas.	A	
ocorrência	de	X	dentro	de	uma	mesma	regra/pergunta	
significa	a	mesma	variável
Variáveis
• Uma	variável	pode	estar:
– Instanciada:	quando	a	variável	já	referencia	
(está	unificada	a)	algum	objeto	
– Livre ou	não-instanciada:	quando	a	variável	não	
referencia	(não	está	unificada	a)	um	objeto,	ou	
seja,	quando	o	objeto	a	que	ela	referencia	ainda	
não	é	conhecido
• Uma	vez	instanciada,	somente	Prolog	pode	
torná-la	não	instanciada	por	meio	de	seu	
mecanismo	de	inferência	(não	o	
programador)
Variável	Anônima
• Quando	uma	variável	aparece	em	uma	única	
cláusula,	não	é	necessário	utilizar	um	nome	
específico	para	ela
• Utiliza-se	a	variável	anônima,	que	é	escrita	com	um	
simples	caracter	‘_’.	
• Por	exemplo:	temfilho(X)	:- progenitor(X,Y).
– Para	definir	temfilho,	não	é	necessário	o	nome	do	
filho(a)
– Assim,	é	o	lugar	ideal	para	a	variável	anônima:
• temfilho(X)	:- progenitor(X,_).
Variável	Anônima
• Cada	vez	que	um	underscore ‘_’	aparece	em	
uma	cláusula,	ele	representa	uma	nova	
variável	anônima
• Por	exemplo:
– alguem_tem_filho	:- progenitor(_,_).
equivale	à:
– alguem_tem_filho	:- progenitor(X,Y).
que	é	bem	diferente	de:
– alguem_tem_filho	:- progenitor(X,X).
• Quando	utilizada	em	uma	pergunta,	seu	valor	não	
é	mostrado.	Por	exemplo,	se	queremos	saber	quem	
tem	filhos	mas	sem	mostrar	os	nomes	dos	filhos,	
podemos	perguntar	(do	programa	da	família):
?- progenitor(X,_).
Exemplo
• Dado	um	grupo	de	pessoas:	sejam	Raul,	Maria,	
Bruno,	Ricardo	e	Julia	que	realizam	trabalhos	
semelhantes,	é	necessário	determinar	possíveis	
grupos	de	trabalho	para	realizar	um	determinado	
projeto.	
• O	supervisor	está	interessado	em	agrupá-los	tendo	
em	conta,	sempre	que	possível,	as	afinidades	entre	
os	membros	do	grupo.	
• Ele	sabe	de	alguns	fatos:
– Raul	e	Maria	preferem	trabalhar	com	colegas	do	sexo	
oposto,	enquanto	que	Julia	não	e	para	Ricardo	é	
indiferente.	
– é	sabido	que	Ricardo	e	Bruno	não	se	entendem	
trabalhando	juntos.	
Exemplo
• Dado	um	grupo	de	pessoas:	sejam	Raul,	Maria,	Bruno,	Ricardo	e	Julia	que	
realizam	trabalhos	semelhantes,	é	necessário	determinar	possíveis	grupos	
de	trabalho	para	realizar	um	determinado	projeto.	O	supervisor	está	
interessado	em	agrupá-los	tendo	em	conta,	sempre	que	possível,	as	
afinidades	entre	os	membros	do	grupo.	Ele	sabe	de	alguns	fatos:
-- Raul	e	Maria	preferem	trabalhar	com	colegas	do	sexo	oposto,	enquanto	
que	Julia	não	e	para	Ricardo	é	indiferente.	
-- é	sabido	que	Ricardo	e	Bruno	não	se	entendem	trabalhando	juntos.	
q Programa	Prolog
homem('Raul').		homem('Bruno').	homem('Ricardo').	
mulher('Maria').	mulher('Julia').
possivel('Raul',Alguem)	:- mulher(Alguem).
possivel('Maria',Fulano)	:- homem(Fulano).		
possivel('Julia',Ciclana)	:-mulher(Ciclana).
possivel('Ricardo',	Alguem)	:- mulher(Alguem).
possivel('Ricardo',	Fulano)	:- homem(Fulano),	Fulano	\=	‘Bruno'.
possivel_dupla(X,Y):-possivel(X,Y), possivel(Y,X), X\=Y.
Propriedades:	
simétrica,	reflexiva	e	transitiva
q Simétrica
– irm(pedro,	paula).	%	É	necessário	“ensinar”a	propriedade
irmaos(X,Y)	:- irm(X,Y).
irmaos(X,Y)	:- irm(Y,X).
q Reflexiva:	o	objeto	em	relação	a	si	próprio
igual(X,X).
q Transitiva:			
mais_alto_1(joao,	maria).
mais_alto_1(pedro,	raul).
mais_alto_1(joao,	pedro).
mais_alto(Fulano,Ciclano)	:-mais_alto_1(Fulano,Ciclano).mais_alto(Fulano,Ciclano)	:-mais_alto_1(Fulano,Alguem),	
mais_alto(Alguem,Ciclano).
Objetos	em	Prolog
Objetos	
(Termos)
Objetos	
Simples
Constantes	
(Atômicos)
Átomos Números
Variáveis
Estruturas
Slides	baseados	em:
Bratko,	I.;	Prolog	Programming	 for	Artificial	Intelligence,
3rd	Edition,	Pearson	Education,	2001.
Clocksin,	W.F.;	Mellish,	C.S.;	Programming	 in	Prolog,
5th	Edition,	Springer-Verlag,	2003.
Programas	Prolog	para	o	Processamento	de	Listas	e	
Aplicações,	Monard,	M.C	&	Nicoletti,	M.C.,	ICMC-USP,	
1993.
Material	elaborado	por
José	Augusto	Baranauskas	
+	adições	de	Maria	Carolina	Monard
+	adições	de	Solange	Oliveira	Rezende

Outros materiais