Programação em LógicaProgramação em Lógica
MatemáticaMatemática
PrologProlog
– 02 –– 02 –
Inteligência ArtificialInteligência Artificial
Fábio M. PereiraFábio M. Pereira
Baseado emBaseado em
Amzi! inc. – www.amzi.comAmzi! inc. – www.amzi.com
PrologProlog
►FatosFatos
►ExercícioExercício
►Consultas SimplesConsultas Simples
►BacktrackingBacktracking
►ExercícioExercício
FatosFatos
► São a forma mais simples de predicadosSão a forma mais simples de predicados
► São similares a registros em bancos de dadosSão similares a registros em bancos de dados
 Podem ser consultados como em um banco de dadosPodem ser consultados como em um banco de dados
► A sintaxe para um fato éA sintaxe para um fato é
pred(arg1, arg2, ... argN).pred(arg1, arg2, ... argN).
 predpred o nome do predicadoo nome do predicado
 arg1, ...arg1, ... os argumentosos argumentos
 NN a aridadea aridade
 .. o final sintático das cláusulas Prologo final sintático das cláusulas Prolog
► Um predicado de aridade zero é simplesmenteUm predicado de aridade zero é simplesmente
 pred.pred.
Termos PrologTermos Prolog
► Os argumentos podem ser qualquerOs argumentos podem ser qualquer termotermo legal emlegal em
PrologProlog
► Os termos básicos sãoOs termos básicos são
 Integer – Um número positivo ou negativoInteger – Um número positivo ou negativo
 Átomo – Um texto constante iniciando com um caractereÁtomo – Um texto constante iniciando com um caractere
minúsculominúsculo
 Variável – Começa com um caractere maiúsculo ou comVariável – Começa com um caractere maiúsculo ou com
underscore (_)underscore (_)
 Estrutura – Termos complexos, cobertos mais adiante noEstrutura – Termos complexos, cobertos mais adiante no
cursocurso
► Algumas implementações estendem esta lista comAlgumas implementações estendem esta lista com
outros tipos de dados, como ponto flutuante ououtros tipos de dados, como ponto flutuante ou
stringsstrings
Conjunto de Caracteres PrologConjunto de Caracteres Prolog
►Letras maiúsculas, A-ZLetras maiúsculas, A-Z
►Letras minúsculas, a-zLetras minúsculas, a-z
►Dígitos, 0-9Dígitos, 0-9
►Símbolos, + - * /  ^ , ; ~ : . ? @ # $ & _Símbolos, + - * /  ^ , ; ~ : . ? @ # $ & _
Átomos (1)Átomos (1)
► São normalmente formados por letras e dígitos comSão normalmente formados por letras e dígitos com
o primeiro caractere minúsculoo primeiro caractere minúsculo
 hellohello
 twoWordsTogethertwoWordsTogether
 x14x14
► O underscore (_) e não o hífen (-), pode ser usadoO underscore (_) e não o hífen (-), pode ser usado
como separador em nomes longoscomo separador em nomes longos
 um_nome_de_atomo_longoum_nome_de_atomo_longo
 z_23z_23
► Átomos não legaisÁtomos não legais
 não-use-hifensnão-use-hifens
 123naousedigitosnoinicio123naousedigitosnoinicio
 _naoiniciecomunderscore_naoiniciecomunderscore
 NaoinicecomcapsNaoinicecomcaps
Átomos (2)Átomos (2)
► Utilize aspas simples para tornar qualquerUtilize aspas simples para tornar qualquer
combinação de caracteres um átomo legalcombinação de caracteres um átomo legal
 ‘‘estes-hifens-estao-ok’estes-hifens-estao-ok’
 ‘‘UpperCase’UpperCase’
 ‘‘embedded blanks’embedded blanks’
► Não utilize aspas duplas (“ ”)para formar átomosNão utilize aspas duplas (“ ”)para formar átomos
 Faz com que a lista de caracteres seja tratada como umaFaz com que a lista de caracteres seja tratada como uma
lista de códigos ASCIIlista de códigos ASCII
► Átomos também podem ser formados a partir deÁtomos também podem ser formados a partir de
símbolossímbolos
 -->-->
 ++++
VariáveisVariáveis
►São similares a átomos, mas se diferenciamSão similares a átomos, mas se diferenciam
por iniciar com um caractere maiúsculo oupor iniciar com um caractere maiúsculo ou
underscore (_)underscore (_)
 XX
 Input_ListInput_List
 _4th_argument_4th_argument
 Z56Z56
Exemplos de FatosExemplos de Fatos
►cliente/3 – em uma aplicação de negócioscliente/3 – em uma aplicação de negócios
cliente(‘John Jones’, conquista, bom_credito).cliente(‘John Jones’, conquista, bom_credito).
cliente(‘Sally Smith’, salvador, bom_credito).cliente(‘Sally Smith’, salvador, bom_credito).
►window/5 – um sistema de janelas que usawindow/5 – um sistema de janelas que usa
fatos para armazenar dados sobre as váriasfatos para armazenar dados sobre as várias
janelas (nomes das janelas e coordenadas)janelas (nomes das janelas e coordenadas)
window(main, 2, 2, 20, 72).window(main, 2, 2, 20, 72).
window(errors, 15, 40, 20, 78).window(errors, 15, 40, 20, 78).
►doenca/2 – um sistema especialista dedoenca/2 – um sistema especialista de
diagnóstico médicodiagnóstico médico
doenca(peste, infecciosa).doenca(peste, infecciosa).
Exercício (1)Exercício (1)
►Banco de Dados GenealógicoBanco de Dados Genealógico
 Crie um arquivo para a sua aplicaçãoCrie um arquivo para a sua aplicação
 Adicione alguns membros de sua famíliaAdicione alguns membros de sua família
►É importante que as informações estejam corretas,É importante que as informações estejam corretas,
uma vez que iremos explorar os relacionamentos entreuma vez que iremos explorar os relacionamentos entre
familiaresfamiliares
►O seu próprio conhecimento servirá para verificar aO seu próprio conhecimento servirá para verificar a
correção de seu programa Prologcorreção de seu programa Prolog
 Inicie por armazenar o sexo dos indivíduosInicie por armazenar o sexo dos indivíduos
Exercício (2)Exercício (2)
►Banco de Dados GenealógicoBanco de Dados Genealógico
 Use dois predicados separados – homem/1 eUse dois predicados separados – homem/1 e
mulher/1mulher/1
homem(denis).homem(denis).
homem(miguel).homem(miguel).
mulher(diana).mulher(diana).
 Lembre-se que se quiser incluir caracteresLembre-se que se quiser incluir caracteres
maiúsculos ou espaços em branco, use aspasmaiúsculos ou espaços em branco, use aspas
simplessimples
homem(‘Ghenghis Khan’).homem(‘Ghenghis Khan’).
Consultas SimplesConsultas Simples
►Consultas Prolog trabalham através deConsultas Prolog trabalham através de
casamento de padrõescasamento de padrões
►O padrão de uma consulta é chamadoO padrão de uma consulta é chamado
objetivoobjetivo
►Se existe um fato que casa com o objetivo,Se existe um fato que casa com o objetivo,
então a consulta é bem sucedida e Prologentão a consulta é bem sucedida e Prolog
responderesponde YesYes
►Caso não exista um fato, então a consultaCaso não exista um fato, então a consulta
falha e Prolog respondefalha e Prolog responde NoNo
►O casamento de padrões em Prolog éO casamento de padrões em Prolog é
chamado dechamado de unificaçãounificação
UnificaçãoUnificação
►Caso o banco de dados contenha apenasCaso o banco de dados contenha apenas
fatos, a unificação é bem sucedida casofatos, a unificação é bem sucedida caso
 Os nomes dos predicados no objetivo e no bancoOs nomes dos predicados no objetivo e no banco
de dados são os mesmosde dados são os mesmos
 Os predicados possuem a mesma aridadeOs predicados possuem a mesma aridade
 Todos os argumentos são os mesmosTodos os argumentos são os mesmos
Programa ExemploPrograma Exemplo
% Salas
sala(cozinha).
sala('escritório').
sala('saguão').
sala('sala de jantar').
sala('porão').
% Localização dos objetos
local(escrivaninha, 'escritório').
local('maçã', cozinha).
local(lanterna, escrivaninha).
local('máquina de lavar', 'porão').
local(cobertor, 'máquina de lavar').
local('brócolis', cozinha).
local(biscoito, cozinha).
local(computador, 'escritório').
% Portas - Conexão entre salas
porta('escritório', 'saguão').
porta(cozinha, 'escritório').
porta('saguão', 'sala de jantar').
porta(cozinha, 'porão').
porta('sala de jantar', cozinha).
% Alimentos
comestivel('maçã').
comestivel(biscoito).
gosto_ruim('brócolis').
% Situação da Lanterna
desligado(lanterna).
% Localização do jogador
aqui(cozinha).
ConsultasConsultas
►Verificar se existe uma sala no jogoVerificar se existe uma sala no jogo
?-?- sala(‘escritório’).sala(‘escritório’).
YesYes
 Prolog responderáProlog responderá YesYes caso um casamento sejacaso um casamento seja
encontradoencontrado
?-?- sala(quarto).sala(quarto).
NoNo
 Prolog responderáProlog responderá NoNo caso nenhum casamentocaso nenhum casamento
seja encontradoseja encontrado
Uso de Variáveis (1)Uso de Variáveis (1)
► Objetivos podem ser generalizados pelo uso deObjetivos podem ser generalizados pelo uso de
variáveis Prologvariáveis Prolog
► Elas não se comportam como variáveis em outrasElas não se comportam como variáveis em outras
linguagens de programaçãolinguagens de programação
 As variáveis em Prolog substituem um ou maisAs variáveis em Prolog substituem um ou mais
argumentos no objetivoargumentos no objetivo
► Adicionam uma nova dimensão na unificação – umaAdicionam uma nova dimensão na unificação – uma
variável irá casar com sucesso com qualquer termovariável irá casar com sucesso com qualquer termo
► Após uma unificação bem sucedida, a variável tomaApós uma unificação bem sucedida, a variável toma
o valor do termo com o qual ela casao valor do termo com o qual ela casa
 Isto é chamado de ligação (Isto é chamado de ligação (bindingbinding) de uma variável) de uma variável
Uso de Variáveis (2)Uso de Variáveis (2)
► Uma vez que exista mais de um valor que umaUma vez que exista mais de um valor que uma
variável possa ser ligada que satisfaça o objetivo,variável possa ser ligada que satisfaça o objetivo,
Prolog fornece um meio de vermos valoresProlog fornece um meio de vermos valores
alternativosalternativos
 Após uma resposta, devemos entrar com um ponto eApós uma resposta, devemos entrar com um ponto e
vírgula (;)vírgula (;)
► ExemploExemplo
?-?- sala(X).sala(X).
X = cozinha ;X = cozinha ;
X = escritório ;X = escritório ;
X = saguão ;X = saguão ;
X = ‘sala de jantar’ ;X = ‘sala de jantar’ ;
X = porão ;X = porão ;
NoNo
Não há mais respostas
Outros Exemplos (1)Outros Exemplos (1)
► Como encontrar todos os objetos na cozinhaComo encontrar todos os objetos na cozinha
?-?- local(Objeto, cozinha).local(Objeto, cozinha).
Objeto = maçã ;Objeto = maçã ;
Objeto = brócolis ;Objeto = brócolis ;
Objeto = biscoito ;Objeto = biscoito ;
NoNo
► Podemos usar duas variáveis para ver tudo em todos osPodemos usar duas variáveis para ver tudo em todos os
lugareslugares
?-?- local(Objeto, Lugar).local(Objeto, Lugar).
Objeto = escrivaninhaObjeto = escrivaninha
Lugar = escritório ;Lugar = escritório ;
Objeto = maçãObjeto = maçã
Lugar = cozinha ;Lugar = cozinha ;
......
Outros Exemplos (2)Outros Exemplos (2)
►Quais os clientes que vivem em Boston, eQuais os clientes que vivem em Boston, e
quais suas situações de crédito?quais suas situações de crédito?
?-?- cliente(X, boston, Y).cliente(X, boston, Y).
►Qual é o título do capítulo 2?Qual é o título do capítulo 2?
?-?- capitulo(2, Titulo).capitulo(2, Titulo).
►Quais as coordenadas da janela principalQuais as coordenadas da janela principal
(main)?(main)?
?-?- window(main, Row1, Col1, Row2, Col2).window(main, Row1, Col1, Row2, Col2).
Como as Consultas Funcionam?Como as Consultas Funcionam?
►Quando Prolog tenta satisfazer um objetivoQuando Prolog tenta satisfazer um objetivo
sobre um predicado, como em local/2, elesobre um predicado, como em local/2, ele
 Busca através das cláusulas que definem local/2Busca através das cláusulas que definem local/2
 Quando encontra um casamento para suasQuando encontra um casamento para suas
variáveis, ele marca a cláusula que foi utilizadavariáveis, ele marca a cláusula que foi utilizada
para satisfazer o objetivopara satisfazer o objetivo
 Então, se o usuário pede por mais respostas, eleEntão, se o usuário pede por mais respostas, ele
retoma sua busca a partir da cláusula marcadaretoma sua busca a partir da cláusula marcada
ExemploExemplo
► ConsultaConsulta local(X, cozinha)local(X, cozinha)
PatternPattern Clause #1Clause #1
local(X, cozinha)local(X, cozinha) local(escrivaninha, ‘escritório’)local(escrivaninha, ‘escritório’)
 Esta unificação falhaEsta unificação falha
► Os nomes dos predicados são os mesmos, o número deOs nomes dos predicados são os mesmos, o número de
argumentos é o mesmo, mas o segundo argumento no padrão,argumentos é o mesmo, mas o segundo argumento no padrão,
cozinhacozinha, é diferente do segundo argumento na cláusula,, é diferente do segundo argumento na cláusula, escritórioescritório
PatternPattern Clause #2Clause #2
local(X, cozinha)local(X, cozinha) local(‘maçã’, cozinha)local(‘maçã’, cozinha)
 Esta unificação é bem sucedidaEsta unificação é bem sucedida
► Os nomes dos predicados, a aridade e os segundos argumentosOs nomes dos predicados, a aridade e os segundos argumentos
são os mesmossão os mesmos
► Os primeiros argumentos podem ser os mesmos se X no padrãoOs primeiros argumentos podem ser os mesmos se X no padrão
recebe o valor ‘recebe o valor ‘maçãmaçã’’
Objetivos PrologObjetivos Prolog
► Possui quatroPossui quatro portasportas representando o fluxo derepresentando o fluxo de
controle através do objetivocontrole através do objetivo
 Call, Exit, Redo e FailCall, Exit, Redo e Fail
► Primeiro o objetivo é chamado (Primeiro o objetivo é chamado (CallCall))
► Se bem sucedido, ele é deixado (Se bem sucedido, ele é deixado (ExitExit))
► Se não, ele falha (Se não, ele falha (FailFail))
► Se o objetivo é retomado, através de um ponto eSe o objetivo é retomado, através de um ponto e
vírgula (;), a portavírgula (;), a porta RedoRedo é executadaé executada
call
inicia a busca por cláusulas que unificam com o objetivo
exit
indica que o objetivo é satisfeito, marca a cláusula e
liga as variáveis apropriadamente
redo
recupera o objetivo, libera as variáveis e retoma a
busca no local marcado
fail
indica que nenhuma outra cláusula casa com o objetivo
call exit
fail redo
Goal
Conferindo ...Conferindo ...
► Para acompanhar a execução de um programa emPara acompanhar a execução de um programa em
Prolog, utilize os seguintes comandosProlog, utilize os seguintes comandos
 debug/0 – inicia o modo de debugdebug/0 – inicia o modo de debug
► O Prolog pára em pontos deO Prolog pára em pontos de tracetrace ee spyspy
 nodebug/0 – sai do modo de debugnodebug/0 – sai do modo de debug
 trace/0, trace/1, trace/2 – inclui um ponto de rastreamentotrace/0, trace/1, trace/2 – inclui um ponto de rastreamento
 notrace/0 – pára onotrace/0 – pára o tracertracer (rastreador)(rastreador)
 spy/1 – coloca um ponto de observação no predicadospy/1 – coloca um ponto de observação no predicado
 nospy/1 – remove o ponto de observaçãonospy/1 – remove o ponto de observação
ExemploExemplo
►Carregue o programa exemplo e entre comCarregue o programa exemplo e entre com
os comandosos comandos
?-?- spy(local).spy(local).
YesYes
[debug] ?-[debug] ?-
 Acompanha a execução do predicadoAcompanha a execução do predicado locallocal
[debug] ?-[debug] ?- local(X, cozinha).local(X, cozinha).
Call: (7) local(_G286, cozinha) ?Call: (7) local(_G286, cozinha) ? (Enter)(Enter)
Exit: (7) local(maçã, cozinha) ?Exit: (7) local(maçã, cozinha) ? (Enter)(Enter)
X = maçã ;X = maçã ;
......
Variáveis x Fatos (1)Variáveis x Fatos (1)
► Variáveis também podem ocorrer em fatos de umVariáveis também podem ocorrer em fatos de um
banco de dados Prolog.banco de dados Prolog.
sleeps(X).sleeps(X).
 Indica que todos dormemIndica que todos dormem
► Podemos adicionar um fato diretamente no promptPodemos adicionar um fato diretamente no prompt
?-?- assert(sleeps(X)).assert(sleeps(X)).
X = _G160X = _G160
YesYes
► Consultas sobre este fato geram os seguintesConsultas sobre este fato geram os seguintes
resultadosresultados
?-?- sleeps(jane).sleeps(jane).
YesYes
?-?- sleeps(tom).sleeps(tom).
YesYes
Variáveis x Fatos (2)Variáveis x Fatos (2)
► Note que Prolog não retorna a ligação de variáveisNote que Prolog não retorna a ligação de variáveis
‘X = jane’ ou ‘X = tom’‘X = jane’ ou ‘X = tom’
 Apesar delas com certeza serem ligadas dessa maneira,Apesar delas com certeza serem ligadas dessa maneira,
somente são listadas variáveis mencionadas na consulta,somente são listadas variáveis mencionadas na consulta,
não aquelas usadas no programanão aquelas usadas no programa
► Prolog também pode ligar variáveis a variáveisProlog também pode ligar variáveis a variáveis
?-?- sleeps(Z).sleeps(Z).
Z = _G160Z = _G160
 Quando duas variáveis não ligadas casam, elas sãoQuando duas variáveis não ligadas casam, elas são
ligadas entre si, mas não a um valorligadas entre si, mas não a um valor
 Uso de uma variável interna comum ‘_G160’Uso de uma variável interna comum ‘_G160’
 Desta maneira Prolog se lembra de que elas possuem oDesta maneira Prolog se lembra de que elas possuem o
mesmo valormesmo valor
Exercício (1)Exercício (1)
► Considere o seguinte banco de dados PrologConsidere o seguinte banco de dados Prolog
easy(1).easy(1).
easy(2).easy(2).
easy(3).easy(3).
gizmo(a, 1).gizmo(a, 1).
gizmo(b, 3).gizmo(b, 3).
gizmo(a, 2).gizmo(a, 2).
gizmo(d, 5).gizmo(d, 5).
gizmo(c, 3).gizmo(c, 3).
gizmo(a, 3).gizmo(a, 3).
gizmo(c, 4).gizmo(c, 4).
► Qual o resultado das consultas?Qual o resultado das consultas?
?- easy(2).
?- easy(X).
?- gizmo(a, X).
?- gizmo(X, 3).
?- gizmo(d, Y).
?- gizmo(X, X).
Exercício (2)Exercício (2)
►Considere o banco de dadosConsidere o banco de dados
harder(a, 1).harder(a, 1).
harder(c, X).harder(c, X).
harder(b, 4).harder(b, 4).
harder(d, 2).harder(d, 2).
►Qual a resposta para as consultasQual a resposta para as consultas
?- harder(a, X).?- harder(a, X).
?- harder(c, X).?- harder(c, X).
?- harder(X, 1).?- harder(X, 1).
?- harder(X, 4).?- harder(X, 4).
Exercício (3)Exercício (3)
►Banco de Dados GenealógicoBanco de Dados Genealógico
 Faça algumas consultas queFaça algumas consultas que
►Confirmem o relacionamento pai, como emConfirmem o relacionamento pai, como em
pais(dennis, diana)pais(dennis, diana)
►Encontre alguns pais como emEncontre alguns pais como em pais(X, diana)pais(X, diana)
►Encontre alguns filhos como emEncontre alguns filhos como em pais(dennis, X)pais(dennis, X)
►Liste todas os pares pai-filho como emListe todas os pares pai-filho como em pais(X, Y)pais(X, Y)
 Se pais/2 parece estar funcionandoSe pais/2 parece estar funcionando
corretamente, adicione membros a sua família decorretamente, adicione membros a sua família de
modo a aumentar o banco de dadosmodo a aumentar o banco de dados
►Lembre-se de incluir os predicados correspondentesLembre-se de incluir os predicados correspondentes
homem/1 ou mulher/1 para cada indivíduo adicionadohomem/1 ou mulher/1 para cada indivíduo adicionado
O que vem a seguir?O que vem a seguir?
►Consultas CompostasConsultas Compostas
►RegrasRegras
►......

Aula Prolog 02

  • 1.
    Programação em LógicaProgramaçãoem Lógica MatemáticaMatemática PrologProlog – 02 –– 02 – Inteligência ArtificialInteligência Artificial Fábio M. PereiraFábio M. Pereira Baseado emBaseado em Amzi! inc. – www.amzi.comAmzi! inc. – www.amzi.com
  • 2.
  • 3.
    FatosFatos ► São aforma mais simples de predicadosSão a forma mais simples de predicados ► São similares a registros em bancos de dadosSão similares a registros em bancos de dados  Podem ser consultados como em um banco de dadosPodem ser consultados como em um banco de dados ► A sintaxe para um fato éA sintaxe para um fato é pred(arg1, arg2, ... argN).pred(arg1, arg2, ... argN).  predpred o nome do predicadoo nome do predicado  arg1, ...arg1, ... os argumentosos argumentos  NN a aridadea aridade  .. o final sintático das cláusulas Prologo final sintático das cláusulas Prolog ► Um predicado de aridade zero é simplesmenteUm predicado de aridade zero é simplesmente  pred.pred.
  • 4.
    Termos PrologTermos Prolog ►Os argumentos podem ser qualquerOs argumentos podem ser qualquer termotermo legal emlegal em PrologProlog ► Os termos básicos sãoOs termos básicos são  Integer – Um número positivo ou negativoInteger – Um número positivo ou negativo  Átomo – Um texto constante iniciando com um caractereÁtomo – Um texto constante iniciando com um caractere minúsculominúsculo  Variável – Começa com um caractere maiúsculo ou comVariável – Começa com um caractere maiúsculo ou com underscore (_)underscore (_)  Estrutura – Termos complexos, cobertos mais adiante noEstrutura – Termos complexos, cobertos mais adiante no cursocurso ► Algumas implementações estendem esta lista comAlgumas implementações estendem esta lista com outros tipos de dados, como ponto flutuante ououtros tipos de dados, como ponto flutuante ou stringsstrings
  • 5.
    Conjunto de CaracteresPrologConjunto de Caracteres Prolog ►Letras maiúsculas, A-ZLetras maiúsculas, A-Z ►Letras minúsculas, a-zLetras minúsculas, a-z ►Dígitos, 0-9Dígitos, 0-9 ►Símbolos, + - * / ^ , ; ~ : . ? @ # $ & _Símbolos, + - * / ^ , ; ~ : . ? @ # $ & _
  • 6.
    Átomos (1)Átomos (1) ►São normalmente formados por letras e dígitos comSão normalmente formados por letras e dígitos com o primeiro caractere minúsculoo primeiro caractere minúsculo  hellohello  twoWordsTogethertwoWordsTogether  x14x14 ► O underscore (_) e não o hífen (-), pode ser usadoO underscore (_) e não o hífen (-), pode ser usado como separador em nomes longoscomo separador em nomes longos  um_nome_de_atomo_longoum_nome_de_atomo_longo  z_23z_23 ► Átomos não legaisÁtomos não legais  não-use-hifensnão-use-hifens  123naousedigitosnoinicio123naousedigitosnoinicio  _naoiniciecomunderscore_naoiniciecomunderscore  NaoinicecomcapsNaoinicecomcaps
  • 7.
    Átomos (2)Átomos (2) ►Utilize aspas simples para tornar qualquerUtilize aspas simples para tornar qualquer combinação de caracteres um átomo legalcombinação de caracteres um átomo legal  ‘‘estes-hifens-estao-ok’estes-hifens-estao-ok’  ‘‘UpperCase’UpperCase’  ‘‘embedded blanks’embedded blanks’ ► Não utilize aspas duplas (“ ”)para formar átomosNão utilize aspas duplas (“ ”)para formar átomos  Faz com que a lista de caracteres seja tratada como umaFaz com que a lista de caracteres seja tratada como uma lista de códigos ASCIIlista de códigos ASCII ► Átomos também podem ser formados a partir deÁtomos também podem ser formados a partir de símbolossímbolos  -->-->  ++++
  • 8.
    VariáveisVariáveis ►São similares aátomos, mas se diferenciamSão similares a átomos, mas se diferenciam por iniciar com um caractere maiúsculo oupor iniciar com um caractere maiúsculo ou underscore (_)underscore (_)  XX  Input_ListInput_List  _4th_argument_4th_argument  Z56Z56
  • 9.
    Exemplos de FatosExemplosde Fatos ►cliente/3 – em uma aplicação de negócioscliente/3 – em uma aplicação de negócios cliente(‘John Jones’, conquista, bom_credito).cliente(‘John Jones’, conquista, bom_credito). cliente(‘Sally Smith’, salvador, bom_credito).cliente(‘Sally Smith’, salvador, bom_credito). ►window/5 – um sistema de janelas que usawindow/5 – um sistema de janelas que usa fatos para armazenar dados sobre as váriasfatos para armazenar dados sobre as várias janelas (nomes das janelas e coordenadas)janelas (nomes das janelas e coordenadas) window(main, 2, 2, 20, 72).window(main, 2, 2, 20, 72). window(errors, 15, 40, 20, 78).window(errors, 15, 40, 20, 78). ►doenca/2 – um sistema especialista dedoenca/2 – um sistema especialista de diagnóstico médicodiagnóstico médico doenca(peste, infecciosa).doenca(peste, infecciosa).
  • 10.
    Exercício (1)Exercício (1) ►Bancode Dados GenealógicoBanco de Dados Genealógico  Crie um arquivo para a sua aplicaçãoCrie um arquivo para a sua aplicação  Adicione alguns membros de sua famíliaAdicione alguns membros de sua família ►É importante que as informações estejam corretas,É importante que as informações estejam corretas, uma vez que iremos explorar os relacionamentos entreuma vez que iremos explorar os relacionamentos entre familiaresfamiliares ►O seu próprio conhecimento servirá para verificar aO seu próprio conhecimento servirá para verificar a correção de seu programa Prologcorreção de seu programa Prolog  Inicie por armazenar o sexo dos indivíduosInicie por armazenar o sexo dos indivíduos
  • 11.
    Exercício (2)Exercício (2) ►Bancode Dados GenealógicoBanco de Dados Genealógico  Use dois predicados separados – homem/1 eUse dois predicados separados – homem/1 e mulher/1mulher/1 homem(denis).homem(denis). homem(miguel).homem(miguel). mulher(diana).mulher(diana).  Lembre-se que se quiser incluir caracteresLembre-se que se quiser incluir caracteres maiúsculos ou espaços em branco, use aspasmaiúsculos ou espaços em branco, use aspas simplessimples homem(‘Ghenghis Khan’).homem(‘Ghenghis Khan’).
  • 12.
    Consultas SimplesConsultas Simples ►ConsultasProlog trabalham através deConsultas Prolog trabalham através de casamento de padrõescasamento de padrões ►O padrão de uma consulta é chamadoO padrão de uma consulta é chamado objetivoobjetivo ►Se existe um fato que casa com o objetivo,Se existe um fato que casa com o objetivo, então a consulta é bem sucedida e Prologentão a consulta é bem sucedida e Prolog responderesponde YesYes ►Caso não exista um fato, então a consultaCaso não exista um fato, então a consulta falha e Prolog respondefalha e Prolog responde NoNo ►O casamento de padrões em Prolog éO casamento de padrões em Prolog é chamado dechamado de unificaçãounificação
  • 13.
    UnificaçãoUnificação ►Caso o bancode dados contenha apenasCaso o banco de dados contenha apenas fatos, a unificação é bem sucedida casofatos, a unificação é bem sucedida caso  Os nomes dos predicados no objetivo e no bancoOs nomes dos predicados no objetivo e no banco de dados são os mesmosde dados são os mesmos  Os predicados possuem a mesma aridadeOs predicados possuem a mesma aridade  Todos os argumentos são os mesmosTodos os argumentos são os mesmos
  • 14.
    Programa ExemploPrograma Exemplo %Salas sala(cozinha). sala('escritório'). sala('saguão'). sala('sala de jantar'). sala('porão'). % Localização dos objetos local(escrivaninha, 'escritório'). local('maçã', cozinha). local(lanterna, escrivaninha). local('máquina de lavar', 'porão'). local(cobertor, 'máquina de lavar'). local('brócolis', cozinha). local(biscoito, cozinha). local(computador, 'escritório'). % Portas - Conexão entre salas porta('escritório', 'saguão'). porta(cozinha, 'escritório'). porta('saguão', 'sala de jantar'). porta(cozinha, 'porão'). porta('sala de jantar', cozinha). % Alimentos comestivel('maçã'). comestivel(biscoito). gosto_ruim('brócolis'). % Situação da Lanterna desligado(lanterna). % Localização do jogador aqui(cozinha).
  • 15.
    ConsultasConsultas ►Verificar se existeuma sala no jogoVerificar se existe uma sala no jogo ?-?- sala(‘escritório’).sala(‘escritório’). YesYes  Prolog responderáProlog responderá YesYes caso um casamento sejacaso um casamento seja encontradoencontrado ?-?- sala(quarto).sala(quarto). NoNo  Prolog responderáProlog responderá NoNo caso nenhum casamentocaso nenhum casamento seja encontradoseja encontrado
  • 16.
    Uso de Variáveis(1)Uso de Variáveis (1) ► Objetivos podem ser generalizados pelo uso deObjetivos podem ser generalizados pelo uso de variáveis Prologvariáveis Prolog ► Elas não se comportam como variáveis em outrasElas não se comportam como variáveis em outras linguagens de programaçãolinguagens de programação  As variáveis em Prolog substituem um ou maisAs variáveis em Prolog substituem um ou mais argumentos no objetivoargumentos no objetivo ► Adicionam uma nova dimensão na unificação – umaAdicionam uma nova dimensão na unificação – uma variável irá casar com sucesso com qualquer termovariável irá casar com sucesso com qualquer termo ► Após uma unificação bem sucedida, a variável tomaApós uma unificação bem sucedida, a variável toma o valor do termo com o qual ela casao valor do termo com o qual ela casa  Isto é chamado de ligação (Isto é chamado de ligação (bindingbinding) de uma variável) de uma variável
  • 17.
    Uso de Variáveis(2)Uso de Variáveis (2) ► Uma vez que exista mais de um valor que umaUma vez que exista mais de um valor que uma variável possa ser ligada que satisfaça o objetivo,variável possa ser ligada que satisfaça o objetivo, Prolog fornece um meio de vermos valoresProlog fornece um meio de vermos valores alternativosalternativos  Após uma resposta, devemos entrar com um ponto eApós uma resposta, devemos entrar com um ponto e vírgula (;)vírgula (;) ► ExemploExemplo ?-?- sala(X).sala(X). X = cozinha ;X = cozinha ; X = escritório ;X = escritório ; X = saguão ;X = saguão ; X = ‘sala de jantar’ ;X = ‘sala de jantar’ ; X = porão ;X = porão ; NoNo Não há mais respostas
  • 18.
    Outros Exemplos (1)OutrosExemplos (1) ► Como encontrar todos os objetos na cozinhaComo encontrar todos os objetos na cozinha ?-?- local(Objeto, cozinha).local(Objeto, cozinha). Objeto = maçã ;Objeto = maçã ; Objeto = brócolis ;Objeto = brócolis ; Objeto = biscoito ;Objeto = biscoito ; NoNo ► Podemos usar duas variáveis para ver tudo em todos osPodemos usar duas variáveis para ver tudo em todos os lugareslugares ?-?- local(Objeto, Lugar).local(Objeto, Lugar). Objeto = escrivaninhaObjeto = escrivaninha Lugar = escritório ;Lugar = escritório ; Objeto = maçãObjeto = maçã Lugar = cozinha ;Lugar = cozinha ; ......
  • 19.
    Outros Exemplos (2)OutrosExemplos (2) ►Quais os clientes que vivem em Boston, eQuais os clientes que vivem em Boston, e quais suas situações de crédito?quais suas situações de crédito? ?-?- cliente(X, boston, Y).cliente(X, boston, Y). ►Qual é o título do capítulo 2?Qual é o título do capítulo 2? ?-?- capitulo(2, Titulo).capitulo(2, Titulo). ►Quais as coordenadas da janela principalQuais as coordenadas da janela principal (main)?(main)? ?-?- window(main, Row1, Col1, Row2, Col2).window(main, Row1, Col1, Row2, Col2).
  • 20.
    Como as ConsultasFuncionam?Como as Consultas Funcionam? ►Quando Prolog tenta satisfazer um objetivoQuando Prolog tenta satisfazer um objetivo sobre um predicado, como em local/2, elesobre um predicado, como em local/2, ele  Busca através das cláusulas que definem local/2Busca através das cláusulas que definem local/2  Quando encontra um casamento para suasQuando encontra um casamento para suas variáveis, ele marca a cláusula que foi utilizadavariáveis, ele marca a cláusula que foi utilizada para satisfazer o objetivopara satisfazer o objetivo  Então, se o usuário pede por mais respostas, eleEntão, se o usuário pede por mais respostas, ele retoma sua busca a partir da cláusula marcadaretoma sua busca a partir da cláusula marcada
  • 21.
    ExemploExemplo ► ConsultaConsulta local(X,cozinha)local(X, cozinha) PatternPattern Clause #1Clause #1 local(X, cozinha)local(X, cozinha) local(escrivaninha, ‘escritório’)local(escrivaninha, ‘escritório’)  Esta unificação falhaEsta unificação falha ► Os nomes dos predicados são os mesmos, o número deOs nomes dos predicados são os mesmos, o número de argumentos é o mesmo, mas o segundo argumento no padrão,argumentos é o mesmo, mas o segundo argumento no padrão, cozinhacozinha, é diferente do segundo argumento na cláusula,, é diferente do segundo argumento na cláusula, escritórioescritório PatternPattern Clause #2Clause #2 local(X, cozinha)local(X, cozinha) local(‘maçã’, cozinha)local(‘maçã’, cozinha)  Esta unificação é bem sucedidaEsta unificação é bem sucedida ► Os nomes dos predicados, a aridade e os segundos argumentosOs nomes dos predicados, a aridade e os segundos argumentos são os mesmossão os mesmos ► Os primeiros argumentos podem ser os mesmos se X no padrãoOs primeiros argumentos podem ser os mesmos se X no padrão recebe o valor ‘recebe o valor ‘maçãmaçã’’
  • 22.
    Objetivos PrologObjetivos Prolog ►Possui quatroPossui quatro portasportas representando o fluxo derepresentando o fluxo de controle através do objetivocontrole através do objetivo  Call, Exit, Redo e FailCall, Exit, Redo e Fail ► Primeiro o objetivo é chamado (Primeiro o objetivo é chamado (CallCall)) ► Se bem sucedido, ele é deixado (Se bem sucedido, ele é deixado (ExitExit)) ► Se não, ele falha (Se não, ele falha (FailFail)) ► Se o objetivo é retomado, através de um ponto eSe o objetivo é retomado, através de um ponto e vírgula (;), a portavírgula (;), a porta RedoRedo é executadaé executada call inicia a busca por cláusulas que unificam com o objetivo exit indica que o objetivo é satisfeito, marca a cláusula e liga as variáveis apropriadamente redo recupera o objetivo, libera as variáveis e retoma a busca no local marcado fail indica que nenhuma outra cláusula casa com o objetivo call exit fail redo Goal
  • 23.
    Conferindo ...Conferindo ... ►Para acompanhar a execução de um programa emPara acompanhar a execução de um programa em Prolog, utilize os seguintes comandosProlog, utilize os seguintes comandos  debug/0 – inicia o modo de debugdebug/0 – inicia o modo de debug ► O Prolog pára em pontos deO Prolog pára em pontos de tracetrace ee spyspy  nodebug/0 – sai do modo de debugnodebug/0 – sai do modo de debug  trace/0, trace/1, trace/2 – inclui um ponto de rastreamentotrace/0, trace/1, trace/2 – inclui um ponto de rastreamento  notrace/0 – pára onotrace/0 – pára o tracertracer (rastreador)(rastreador)  spy/1 – coloca um ponto de observação no predicadospy/1 – coloca um ponto de observação no predicado  nospy/1 – remove o ponto de observaçãonospy/1 – remove o ponto de observação
  • 24.
    ExemploExemplo ►Carregue o programaexemplo e entre comCarregue o programa exemplo e entre com os comandosos comandos ?-?- spy(local).spy(local). YesYes [debug] ?-[debug] ?-  Acompanha a execução do predicadoAcompanha a execução do predicado locallocal [debug] ?-[debug] ?- local(X, cozinha).local(X, cozinha). Call: (7) local(_G286, cozinha) ?Call: (7) local(_G286, cozinha) ? (Enter)(Enter) Exit: (7) local(maçã, cozinha) ?Exit: (7) local(maçã, cozinha) ? (Enter)(Enter) X = maçã ;X = maçã ; ......
  • 25.
    Variáveis x Fatos(1)Variáveis x Fatos (1) ► Variáveis também podem ocorrer em fatos de umVariáveis também podem ocorrer em fatos de um banco de dados Prolog.banco de dados Prolog. sleeps(X).sleeps(X).  Indica que todos dormemIndica que todos dormem ► Podemos adicionar um fato diretamente no promptPodemos adicionar um fato diretamente no prompt ?-?- assert(sleeps(X)).assert(sleeps(X)). X = _G160X = _G160 YesYes ► Consultas sobre este fato geram os seguintesConsultas sobre este fato geram os seguintes resultadosresultados ?-?- sleeps(jane).sleeps(jane). YesYes ?-?- sleeps(tom).sleeps(tom). YesYes
  • 26.
    Variáveis x Fatos(2)Variáveis x Fatos (2) ► Note que Prolog não retorna a ligação de variáveisNote que Prolog não retorna a ligação de variáveis ‘X = jane’ ou ‘X = tom’‘X = jane’ ou ‘X = tom’  Apesar delas com certeza serem ligadas dessa maneira,Apesar delas com certeza serem ligadas dessa maneira, somente são listadas variáveis mencionadas na consulta,somente são listadas variáveis mencionadas na consulta, não aquelas usadas no programanão aquelas usadas no programa ► Prolog também pode ligar variáveis a variáveisProlog também pode ligar variáveis a variáveis ?-?- sleeps(Z).sleeps(Z). Z = _G160Z = _G160  Quando duas variáveis não ligadas casam, elas sãoQuando duas variáveis não ligadas casam, elas são ligadas entre si, mas não a um valorligadas entre si, mas não a um valor  Uso de uma variável interna comum ‘_G160’Uso de uma variável interna comum ‘_G160’  Desta maneira Prolog se lembra de que elas possuem oDesta maneira Prolog se lembra de que elas possuem o mesmo valormesmo valor
  • 27.
    Exercício (1)Exercício (1) ►Considere o seguinte banco de dados PrologConsidere o seguinte banco de dados Prolog easy(1).easy(1). easy(2).easy(2). easy(3).easy(3). gizmo(a, 1).gizmo(a, 1). gizmo(b, 3).gizmo(b, 3). gizmo(a, 2).gizmo(a, 2). gizmo(d, 5).gizmo(d, 5). gizmo(c, 3).gizmo(c, 3). gizmo(a, 3).gizmo(a, 3). gizmo(c, 4).gizmo(c, 4). ► Qual o resultado das consultas?Qual o resultado das consultas? ?- easy(2). ?- easy(X). ?- gizmo(a, X). ?- gizmo(X, 3). ?- gizmo(d, Y). ?- gizmo(X, X).
  • 28.
    Exercício (2)Exercício (2) ►Considereo banco de dadosConsidere o banco de dados harder(a, 1).harder(a, 1). harder(c, X).harder(c, X). harder(b, 4).harder(b, 4). harder(d, 2).harder(d, 2). ►Qual a resposta para as consultasQual a resposta para as consultas ?- harder(a, X).?- harder(a, X). ?- harder(c, X).?- harder(c, X). ?- harder(X, 1).?- harder(X, 1). ?- harder(X, 4).?- harder(X, 4).
  • 29.
    Exercício (3)Exercício (3) ►Bancode Dados GenealógicoBanco de Dados Genealógico  Faça algumas consultas queFaça algumas consultas que ►Confirmem o relacionamento pai, como emConfirmem o relacionamento pai, como em pais(dennis, diana)pais(dennis, diana) ►Encontre alguns pais como emEncontre alguns pais como em pais(X, diana)pais(X, diana) ►Encontre alguns filhos como emEncontre alguns filhos como em pais(dennis, X)pais(dennis, X) ►Liste todas os pares pai-filho como emListe todas os pares pai-filho como em pais(X, Y)pais(X, Y)  Se pais/2 parece estar funcionandoSe pais/2 parece estar funcionando corretamente, adicione membros a sua família decorretamente, adicione membros a sua família de modo a aumentar o banco de dadosmodo a aumentar o banco de dados ►Lembre-se de incluir os predicados correspondentesLembre-se de incluir os predicados correspondentes homem/1 ou mulher/1 para cada indivíduo adicionadohomem/1 ou mulher/1 para cada indivíduo adicionado
  • 30.
    O que vema seguir?O que vem a seguir? ►Consultas CompostasConsultas Compostas ►RegrasRegras ►......