SlideShare uma empresa Scribd logo
1 de 30
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
►......

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

IA Prolog
IA PrologIA Prolog
IA Prolog
 
Aula de Prolog 08 - Unificação
Aula de Prolog 08 - UnificaçãoAula de Prolog 08 - Unificação
Aula de Prolog 08 - Unificação
 
Introdução ao Prolog
Introdução ao PrologIntrodução ao Prolog
Introdução ao Prolog
 
Programacao logica
Programacao logicaProgramacao logica
Programacao logica
 
Listas em Prolog
Listas em PrologListas em Prolog
Listas em Prolog
 
Introdução a python
Introdução a pythonIntrodução a python
Introdução a python
 
Aula Prolog 09 - Listas
Aula Prolog 09 - ListasAula Prolog 09 - Listas
Aula Prolog 09 - Listas
 
Regras de Produção: o Motor de Inferência JESS
Regras de Produção:o Motor de Inferência JESSRegras de Produção:o Motor de Inferência JESS
Regras de Produção: o Motor de Inferência JESS
 
Aula 02 - Curso PHP e MySQL
Aula 02 - Curso PHP e MySQLAula 02 - Curso PHP e MySQL
Aula 02 - Curso PHP e MySQL
 
Python 02
Python 02Python 02
Python 02
 
Aula prolog 02 ia
Aula prolog 02   iaAula prolog 02   ia
Aula prolog 02 ia
 
Palestra python
Palestra pythonPalestra python
Palestra python
 
Python 01
Python 01Python 01
Python 01
 
Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04
 
Perl Moderno, dia5
Perl Moderno, dia5Perl Moderno, dia5
Perl Moderno, dia5
 
Python 03
Python 03Python 03
Python 03
 
Estrutura de Dados - Aula 06
Estrutura de Dados - Aula 06Estrutura de Dados - Aula 06
Estrutura de Dados - Aula 06
 
Python
PythonPython
Python
 
Minicurso: Python em 4 horas - FATEC SCS 2015
Minicurso: Python em 4 horas - FATEC SCS 2015 Minicurso: Python em 4 horas - FATEC SCS 2015
Minicurso: Python em 4 horas - FATEC SCS 2015
 
Perl Moderno, dia4
Perl Moderno, dia4Perl Moderno, dia4
Perl Moderno, dia4
 

Destaque

Programação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte IProgramação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte IFabio Moura Pereira
 
04 - Gerenciamento de Threads - II
04 -  Gerenciamento de Threads - II04 -  Gerenciamento de Threads - II
04 - Gerenciamento de Threads - IIFabio Moura Pereira
 
Desenvolvimento de Sistemas Web - HTML5 - Introdução
Desenvolvimento de Sistemas Web - HTML5 - IntroduçãoDesenvolvimento de Sistemas Web - HTML5 - Introdução
Desenvolvimento de Sistemas Web - HTML5 - IntroduçãoFabio Moura Pereira
 
05 - Sincronização de Threads - I
05 - Sincronização de Threads - I05 - Sincronização de Threads - I
05 - Sincronização de Threads - IFabio Moura Pereira
 
Programação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte IIProgramação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte IIFabio Moura Pereira
 
Programação Concorrente - Introdução
Programação Concorrente - IntroduçãoProgramação Concorrente - Introdução
Programação Concorrente - IntroduçãoFabio Moura Pereira
 
Aula de Desenvolvimento de Sistemas Web - CSS3
Aula de Desenvolvimento de Sistemas Web - CSS3Aula de Desenvolvimento de Sistemas Web - CSS3
Aula de Desenvolvimento de Sistemas Web - CSS3Fabio Moura Pereira
 
Aula Interface Gráfica do Usuário
Aula Interface Gráfica do UsuárioAula Interface Gráfica do Usuário
Aula Interface Gráfica do UsuárioFabio Moura Pereira
 
Curso de Desenvolvimento de Sistemas Web - (X)HTML
Curso de Desenvolvimento de Sistemas Web - (X)HTMLCurso de Desenvolvimento de Sistemas Web - (X)HTML
Curso de Desenvolvimento de Sistemas Web - (X)HTMLFabio Moura Pereira
 

Destaque (20)

Aula de Prolog 06 - Recursão
Aula de Prolog 06 - RecursãoAula de Prolog 06 - Recursão
Aula de Prolog 06 - Recursão
 
Programação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte IProgramação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte I
 
Aula Persistência 01 (Java)
Aula Persistência 01 (Java)Aula Persistência 01 (Java)
Aula Persistência 01 (Java)
 
04 - Gerenciamento de Threads - II
04 -  Gerenciamento de Threads - II04 -  Gerenciamento de Threads - II
04 - Gerenciamento de Threads - II
 
Desenvolvimento de Sistemas Web - HTML5 - Introdução
Desenvolvimento de Sistemas Web - HTML5 - IntroduçãoDesenvolvimento de Sistemas Web - HTML5 - Introdução
Desenvolvimento de Sistemas Web - HTML5 - Introdução
 
Haskell - Introdução
Haskell - IntroduçãoHaskell - Introdução
Haskell - Introdução
 
05 - Sincronização de Threads - I
05 - Sincronização de Threads - I05 - Sincronização de Threads - I
05 - Sincronização de Threads - I
 
Programação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte IIProgramação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte II
 
Aula Tratamento de Exceções
Aula Tratamento de ExceçõesAula Tratamento de Exceções
Aula Tratamento de Exceções
 
Programação Concorrente - Introdução
Programação Concorrente - IntroduçãoProgramação Concorrente - Introdução
Programação Concorrente - Introdução
 
Aula de Desenvolvimento de Sistemas Web - CSS3
Aula de Desenvolvimento de Sistemas Web - CSS3Aula de Desenvolvimento de Sistemas Web - CSS3
Aula de Desenvolvimento de Sistemas Web - CSS3
 
Aula Interface Gráfica do Usuário
Aula Interface Gráfica do UsuárioAula Interface Gráfica do Usuário
Aula Interface Gráfica do Usuário
 
Aula Java Swing
Aula Java SwingAula Java Swing
Aula Java Swing
 
PHP - Strings
PHP - StringsPHP - Strings
PHP - Strings
 
Curso de PHP - Objetos
Curso de PHP - ObjetosCurso de PHP - Objetos
Curso de PHP - Objetos
 
Aprendendo Action Script 2.0
Aprendendo  Action Script 2.0Aprendendo  Action Script 2.0
Aprendendo Action Script 2.0
 
Aula 05 - Java Script Básico
Aula 05 -  Java Script BásicoAula 05 -  Java Script Básico
Aula 05 - Java Script Básico
 
PHP - Funções
PHP - FunçõesPHP - Funções
PHP - Funções
 
Curso de Desenvolvimento de Sistemas Web - (X)HTML
Curso de Desenvolvimento de Sistemas Web - (X)HTMLCurso de Desenvolvimento de Sistemas Web - (X)HTML
Curso de Desenvolvimento de Sistemas Web - (X)HTML
 
PHP - Introdução
PHP - IntroduçãoPHP - Introdução
PHP - Introdução
 

Semelhante a Aula Prolog 02

7-Prolog-Base (2).pdf
7-Prolog-Base (2).pdf7-Prolog-Base (2).pdf
7-Prolog-Base (2).pdfSofiaPiteira
 
Introdução ao Prolog - Prof. Sérgio S. Costa
Introdução ao Prolog - Prof. Sérgio S. CostaIntrodução ao Prolog - Prof. Sérgio S. Costa
Introdução ao Prolog - Prof. Sérgio S. CostaLeinylson Fontinele
 
Apresentação1 prolog trabalho phillipe
Apresentação1 prolog trabalho phillipeApresentação1 prolog trabalho phillipe
Apresentação1 prolog trabalho phillipePhillipe Eduardo
 
Noções de programação lógica
Noções de programação lógicaNoções de programação lógica
Noções de programação lógicaDemis Gomes
 
Java Desktop
Java DesktopJava Desktop
Java Desktopciceroclc
 

Semelhante a Aula Prolog 02 (7)

7-Prolog-Base (2).pdf
7-Prolog-Base (2).pdf7-Prolog-Base (2).pdf
7-Prolog-Base (2).pdf
 
Introdução ao Prolog - Prof. Sérgio S. Costa
Introdução ao Prolog - Prof. Sérgio S. CostaIntrodução ao Prolog - Prof. Sérgio S. Costa
Introdução ao Prolog - Prof. Sérgio S. Costa
 
Aula3 sintaxe semantica
Aula3 sintaxe semanticaAula3 sintaxe semantica
Aula3 sintaxe semantica
 
Apresentação1 prolog trabalho phillipe
Apresentação1 prolog trabalho phillipeApresentação1 prolog trabalho phillipe
Apresentação1 prolog trabalho phillipe
 
Aula 01 - Curso PHP e MySQL
Aula 01 - Curso PHP e MySQLAula 01 - Curso PHP e MySQL
Aula 01 - Curso PHP e MySQL
 
Noções de programação lógica
Noções de programação lógicaNoções de programação lógica
Noções de programação lógica
 
Java Desktop
Java DesktopJava Desktop
Java Desktop
 

Mais de Fabio Moura Pereira

Programação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e ConcorrênciaProgramação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e ConcorrênciaFabio Moura Pereira
 
Aula - Interfaces e Estilos de Interação
Aula - Interfaces e Estilos de InteraçãoAula - Interfaces e Estilos de Interação
Aula - Interfaces e Estilos de InteraçãoFabio Moura Pereira
 
Aula Desenvolvimento de Jogos - Game Engine (Motor de Jogos)
Aula Desenvolvimento de Jogos - Game Engine (Motor de Jogos)Aula Desenvolvimento de Jogos - Game Engine (Motor de Jogos)
Aula Desenvolvimento de Jogos - Game Engine (Motor de Jogos)Fabio Moura Pereira
 
Desenvolvimento de Jogos - Game Design
Desenvolvimento de Jogos - Game DesignDesenvolvimento de Jogos - Game Design
Desenvolvimento de Jogos - Game DesignFabio Moura Pereira
 
Desenvolvimento de Jogos - Mercado Parte 2
Desenvolvimento de Jogos - Mercado Parte 2Desenvolvimento de Jogos - Mercado Parte 2
Desenvolvimento de Jogos - Mercado Parte 2Fabio Moura Pereira
 
Desenvolvimento de Jogos - Mercado Parte 1
Desenvolvimento de Jogos - Mercado Parte 1Desenvolvimento de Jogos - Mercado Parte 1
Desenvolvimento de Jogos - Mercado Parte 1Fabio Moura Pereira
 

Mais de Fabio Moura Pereira (8)

Programação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e ConcorrênciaProgramação Concorrente - Objetos e Concorrência
Programação Concorrente - Objetos e Concorrência
 
Aula - Interfaces e Estilos de Interação
Aula - Interfaces e Estilos de InteraçãoAula - Interfaces e Estilos de Interação
Aula - Interfaces e Estilos de Interação
 
Aula Desenvolvimento de Jogos - Game Engine (Motor de Jogos)
Aula Desenvolvimento de Jogos - Game Engine (Motor de Jogos)Aula Desenvolvimento de Jogos - Game Engine (Motor de Jogos)
Aula Desenvolvimento de Jogos - Game Engine (Motor de Jogos)
 
Padrões de Projeto de Software
Padrões de Projeto de SoftwarePadrões de Projeto de Software
Padrões de Projeto de Software
 
Curso de PHP - Arrays
Curso de PHP - ArraysCurso de PHP - Arrays
Curso de PHP - Arrays
 
Desenvolvimento de Jogos - Game Design
Desenvolvimento de Jogos - Game DesignDesenvolvimento de Jogos - Game Design
Desenvolvimento de Jogos - Game Design
 
Desenvolvimento de Jogos - Mercado Parte 2
Desenvolvimento de Jogos - Mercado Parte 2Desenvolvimento de Jogos - Mercado Parte 2
Desenvolvimento de Jogos - Mercado Parte 2
 
Desenvolvimento de Jogos - Mercado Parte 1
Desenvolvimento de Jogos - Mercado Parte 1Desenvolvimento de Jogos - Mercado Parte 1
Desenvolvimento de Jogos - Mercado Parte 1
 

Aula Prolog 02

  • 1. 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
  • 3. 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.
  • 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 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, + - * / ^ , ; ~ : . ? @ # $ & _
  • 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 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).
  • 10. 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
  • 11. 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’).
  • 12. 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
  • 13. 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
  • 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 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
  • 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)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 ; ......
  • 19. 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).
  • 20. 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
  • 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 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çã ; ......
  • 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) ►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).
  • 29. 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
  • 30. O que vem a seguir?O que vem a seguir? ►Consultas CompostasConsultas Compostas ►RegrasRegras ►......