SlideShare uma empresa Scribd logo
Programação em LógicaProgramação em Lógica
MatemáticaMatemática
PrologProlog
– 03 –– 03 –
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
►Consultas CombinadasConsultas Combinadas
►Predicados InternosPredicados Internos
►ExercíciosExercícios
Consultas Combinadas (1)Consultas Combinadas (1)
► Consultas simples podem ser combinadas paraConsultas simples podem ser combinadas para
formar consultas complexasformar consultas complexas
► Exemplo:Exemplo:
 Quais objetos comestíveis estão na cozinha?Quais objetos comestíveis estão na cozinha?
?-?- local(X, cozinha), comestivel(X).local(X, cozinha), comestivel(X).
► Uma consulta combinada possui umaUma consulta combinada possui uma conjunçãoconjunção dede
objetivosobjetivos
 A vírgula separando os objetivos é lida como “e”A vírgula separando os objetivos é lida como “e”
 Existe um X, tal que X esteja localizado na cozinhaExiste um X, tal que X esteja localizado na cozinha ee X éX é
comestível?comestível?
► Se uma mesma variável aparece mais de uma vezSe uma mesma variável aparece mais de uma vez
em um consulta, ela deve ter o mesmo valor emem um consulta, ela deve ter o mesmo valor em
todos os locais em que aparecetodos os locais em que aparece
Consultas Combinadas (2)Consultas Combinadas (2)
► O nome de uma variável não possui nenhumO nome de uma variável não possui nenhum
significado em qualquer outra consulta, ou cláusulasignificado em qualquer outra consulta, ou cláusula
do banco de dadosdo banco de dados
 Se X aparece em outras consultas ou cláusulas, aSe X aparece em outras consultas ou cláusulas, a
consulta ou cláusula possui a sua própria cópia daconsulta ou cláusula possui a sua própria cópia da
variávelvariável
 Dizemos que oDizemos que o escopoescopo de uma variável lógica é umade uma variável lógica é uma
consultaconsulta
► Ordem de execuçãoOrdem de execução
 Uma consulta combinada inicia chamando o primeiroUma consulta combinada inicia chamando o primeiro
objetivo a esquerdaobjetivo a esquerda
 Se bem sucedido, o próximo objetivo é chamado com asSe bem sucedido, o próximo objetivo é chamado com as
variáveis ligadas como um conjunto do objetivo préviovariáveis ligadas como um conjunto do objetivo prévio
 Se a consulta termina via portaSe a consulta termina via porta exitexit do objetivo mais ado objetivo mais a
direita, ela é bem sucedida e Prolog imprime os valoresdireita, ela é bem sucedida e Prolog imprime os valores
da tabela de variáveisda tabela de variáveis
Consultas Combinadas (3)Consultas Combinadas (3)
► Ordem de execução (cont.)Ordem de execução (cont.)
 Se um usuário digita um ponto e vírgula (;) após umaSe um usuário digita um ponto e vírgula (;) após uma
resposta, a consulta é retomada na portaresposta, a consulta é retomada na porta redoredo dodo
objetivo mais a direitaobjetivo mais a direita
 Somente as variáveis ligadas deste conjunto sãoSomente as variáveis ligadas deste conjunto são
desfeitasdesfeitas
 Se a consulta termina via portaSe a consulta termina via porta failfail do objetivo mais ado objetivo mais a
esquerda, a consulta falhaesquerda, a consulta falha
 Utilize o debug para acompanhar o processoUtilize o debug para acompanhar o processo variables
query out
no ;
Goal 1 Goal 2
ExemploExemplo
►?-?- local(X, cozinha), comestivel(X).local(X, cozinha), comestivel(X).
[debug] ?- local(X, cozinha), comestivel(X).
Call: (7) local(_G283, cozinha) ? creep
Exit: (7) local(maçã, cozinha) ? creep
Call: (7) comestivel(maçã) ? creep
Exit: (7) comestivel(maçã) ? creep
X = maçã ;
Fail: (7) comestivel(maçã) ? creep
Redo: (7) local(_G283, cozinha) ? creep
Exit: (7) local(brócolis, cozinha) ? creep
Call: (7) comestivel(brócolis) ? creep
Fail: (7) comestivel(brócolis) ? creep
Redo: (7) local(_G283, cozinha) ? creep
Exit: (7) local(biscoito, cozinha) ? creep
Call: (7) comestivel(biscoito) ? creep
Exit: (7) comestivel(biscoito) ? creep
X = biscoito ;
Fail: (7) comestivel(biscoito) ? creep
Redo: (7) local(_G283, cozinha) ? creep
Fail: (7) local(_G283, cozinha) ? creep
No
Exemplo com Duas VariáveisExemplo com Duas Variáveis
►Liste todos os objetos localizados em salasListe todos os objetos localizados em salas
adjacentes à cozinhaadjacentes à cozinha
►Em termos lógicos:Em termos lógicos:
 Encontre T e R de modo que exista uma porta daEncontre T e R de modo que exista uma porta da
cozinha para R e T está localizado em Rcozinha para R e T está localizado em R
?- porta(cozinha, R), local(T,R).
R = escritório
T = escrivaninha;
R = escritório
T = computador;
R = porão
T = ‘máquina de lavar’;
No
Predicados Internos (1)Predicados Internos (1)
► Até este ponto vimos qual o formato utilizado porAté este ponto vimos qual o formato utilizado por
Prolog para nos responder às consultasProlog para nos responder às consultas
► A partir de agora veremos como gerar consultasA partir de agora veremos como gerar consultas
personalizadas de acordo com nossaspersonalizadas de acordo com nossas
necessidadesnecessidades
► Características de Predicados InternosCaracterísticas de Predicados Internos
 Não existem cláusulas no banco de dados paraNão existem cláusulas no banco de dados para
predicados internospredicados internos
 Um predicado interno é predefinido por PrologUm predicado interno é predefinido por Prolog
 São normalmente escritos na linguagem usada paraSão normalmente escritos na linguagem usada para
implementar o Prologimplementar o Prolog
 Podem realizar funções não relacionadas com o teoremaPodem realizar funções não relacionadas com o teorema
de prova lógicade prova lógica
 São chamados as vezes de predicados extra-lógicosSão chamados as vezes de predicados extra-lógicos
Predicados Internos (2)Predicados Internos (2)
►Veremos os predicados internos à medidaVeremos os predicados internos à medida
que precisemos delesque precisemos deles
►Predicados de entrada/saída usados paraPredicados de entrada/saída usados para
imprimir uma consultaimprimir uma consulta
 write/1write/1 – imprime o seu argumento na tela,– imprime o seu argumento na tela,
sempre falha em um backtrackingsempre falha em um backtracking
 nl/0nl/0 – inicia uma nova linha– inicia uma nova linha
 tab/1tab/1 – espera um inteiro como argumento e– espera um inteiro como argumento e
tabula o número de espaçostabula o número de espaços
 fail/0fail/0 – provoca uma falha, ou seja, passa o– provoca uma falha, ou seja, passa o
controle imediatamente para uma porta redocontrole imediatamente para uma porta redo
ExemplosExemplos
►Listar todos os objetos que estão na cozinhaListar todos os objetos que estão na cozinha
?-?- local(X, cozinha), write(X), nl, fail.local(X, cozinha), write(X), nl, fail.
maçãmaçã
brócolisbrócolis
biscoitobiscoito
NoNo
?-?- local(X, cozinha), write(X), tab(8), fail.local(X, cozinha), write(X), tab(8), fail.
maçã brócolis biscoitomaçã brócolis biscoito
Exercícios (1)Exercícios (1)
► Considere o banco de dados PrologConsidere o banco de dados Prolog
► Quais os resultados das seguintes consultas?Quais os resultados das seguintes consultas?
 ?-?- gizmo(a,X), easy(X).gizmo(a,X), easy(X).
 ?-?- gizmo(c,X), easy(X).gizmo(c,X), easy(X).
 ?-?- gizmo(d,Z), easy(Z).gizmo(d,Z), easy(Z).
 ?-?- easy(Y), gizmo(X,Y).easy(Y), gizmo(X,Y).
 ?-?- write(‘report’), nl, easy(T), write(T), gizmo(M, T), tab(2), write(M),write(‘report’), nl, easy(T), write(T), gizmo(M, T), tab(2), write(M),
fail.fail.
 ?-?- write(‘buggy’), nl, easy(Z), write(X), gizmo(Z,X), tab(2), write(Z),write(‘buggy’), nl, easy(Z), write(X), gizmo(Z,X), tab(2), write(Z),
fail.fail.
 ?-?- easy(X), harder(Y, X).easy(X), harder(Y, X).
easy(1).
easy(2).
easy(3).
gizmo(a,1).
gizmo(b,3).
gizmo(a,2).
gizmo(d,5).
gizmo(c,3).
gizmo(a,3).
gizmo(c,4).
harder(a,1).
harder(c,X).
harder(b,4).
harder(d,2).
Exercícios (2)Exercícios (2)
► Qual o resultado da consulta?Qual o resultado da consulta?
?-?- porta(cozinha, R), write(R), nl, local(T, R), tab(3),porta(cozinha, R), write(R), nl, local(T, R), tab(3),
write(T), nl, fail.write(T), nl, fail.
► Banco de Dados GenealógicoBanco de Dados Genealógico
 Encontre alguém que seja mãeEncontre alguém que seja mãe
?-?- pais(X, Alguem), mulher(X).pais(X, Alguem), mulher(X).
 Escreva consultas similares para pai, filho e filhaEscreva consultas similares para pai, filho e filha
 Rastreie a execução e compare:Rastreie a execução e compare:
?-?- pais(X, Alguem), mulher(X).pais(X, Alguem), mulher(X).
?-?- mulher(X), pais(X, Alguem).mulher(X), pais(X, Alguem).
 Elas possuem as mesmas respostas?Elas possuem as mesmas respostas?
 Escreva consultas para encontrar avós, avôs e bisavôsEscreva consultas para encontrar avós, avôs e bisavôs
O que vem a seguir?O que vem a seguir?
►RegrasRegras
►AritméticaAritmética
►......

Mais conteúdo relacionado

Mais procurados

IA Prolog
IA PrologIA Prolog
IA Prolog
rafael.joi
 
Aula de Prolog 08 - Unificação
Aula de Prolog 08 - UnificaçãoAula de Prolog 08 - Unificação
Aula de Prolog 08 - Unificação
Fabio Moura Pereira
 
Introdução a python
Introdução a pythonIntrodução a python
Introdução a python
Gemilson George
 
Listas em Prolog
Listas em PrologListas em Prolog
Listas em Prolog
Natã Melo
 
01
0101
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
elliando dias
 
Python 02
Python 02Python 02
Python 02
Bruno Catão
 
Aula Prolog 09 - Listas
Aula Prolog 09 - ListasAula Prolog 09 - Listas
Aula Prolog 09 - Listas
Fabio Moura Pereira
 
Aula 02 - Curso PHP e MySQL
Aula 02 - Curso PHP e MySQLAula 02 - Curso PHP e MySQL
Aula 02 - Curso PHP e MySQL
B&R Consultoria Empresarial
 
Python 01
Python 01Python 01
Python 01
Bruno Catão
 
Palestra python
Palestra pythonPalestra python
Palestra python
Rony Cruch
 
Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04
thomasdacosta
 
Python 03
Python 03Python 03
Python 03
Bruno Catão
 
Aula prolog 02 ia
Aula prolog 02   iaAula prolog 02   ia
Aula prolog 02 ia
Janaide Nogueira
 
Python
PythonPython
Estrutura de Dados - Aula 06
Estrutura de Dados - Aula 06Estrutura de Dados - Aula 06
Estrutura de Dados - Aula 06
thomasdacosta
 
Estrutura de Dados - Aula 08
Estrutura de Dados - Aula 08Estrutura de Dados - Aula 08
Estrutura de Dados - Aula 08
thomasdacosta
 
Perl Moderno, dia5
Perl Moderno, dia5Perl Moderno, dia5
Perl Moderno, dia5
garux
 
Estrutura de Dados - Aula 03
Estrutura de Dados - Aula 03Estrutura de Dados - Aula 03
Estrutura de Dados - Aula 03
thomasdacosta
 
[Curso Java Basico] Aula 56: Enum: metodos abstratos
[Curso Java Basico] Aula 56: Enum: metodos abstratos[Curso Java Basico] Aula 56: Enum: metodos abstratos
[Curso Java Basico] Aula 56: Enum: metodos abstratos
Loiane Groner
 

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 a python
Introdução a pythonIntrodução a python
Introdução a python
 
Listas em Prolog
Listas em PrologListas em Prolog
Listas em Prolog
 
01
0101
01
 
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
 
Python 02
Python 02Python 02
Python 02
 
Aula Prolog 09 - Listas
Aula Prolog 09 - ListasAula Prolog 09 - Listas
Aula Prolog 09 - Listas
 
Aula 02 - Curso PHP e MySQL
Aula 02 - Curso PHP e MySQLAula 02 - Curso PHP e MySQL
Aula 02 - Curso PHP e MySQL
 
Python 01
Python 01Python 01
Python 01
 
Palestra python
Palestra pythonPalestra python
Palestra python
 
Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04Estrutura de Dados - Aula 04
Estrutura de Dados - Aula 04
 
Python 03
Python 03Python 03
Python 03
 
Aula prolog 02 ia
Aula prolog 02   iaAula prolog 02   ia
Aula prolog 02 ia
 
Python
PythonPython
Python
 
Estrutura de Dados - Aula 06
Estrutura de Dados - Aula 06Estrutura de Dados - Aula 06
Estrutura de Dados - Aula 06
 
Estrutura de Dados - Aula 08
Estrutura de Dados - Aula 08Estrutura de Dados - Aula 08
Estrutura de Dados - Aula 08
 
Perl Moderno, dia5
Perl Moderno, dia5Perl Moderno, dia5
Perl Moderno, dia5
 
Estrutura de Dados - Aula 03
Estrutura de Dados - Aula 03Estrutura de Dados - Aula 03
Estrutura de Dados - Aula 03
 
[Curso Java Basico] Aula 56: Enum: metodos abstratos
[Curso Java Basico] Aula 56: Enum: metodos abstratos[Curso Java Basico] Aula 56: Enum: metodos abstratos
[Curso Java Basico] Aula 56: Enum: metodos abstratos
 

Destaque

Aula Persistência 01 (Java)
Aula Persistência 01 (Java)Aula Persistência 01 (Java)
Aula Persistência 01 (Java)
Fabio Moura Pereira
 
04 - Gerenciamento de Threads - II
04 -  Gerenciamento de Threads - II04 -  Gerenciamento de Threads - II
04 - Gerenciamento de Threads - II
Fabio 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ção
Fabio Moura Pereira
 
Haskell - Introdução
Haskell - IntroduçãoHaskell - Introdução
Haskell - Introdução
Fabio Moura Pereira
 
05 - Sincronização de Threads - I
05 - Sincronização de Threads - I05 - Sincronização de Threads - I
05 - Sincronização de Threads - I
Fabio 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 II
Fabio Moura Pereira
 
Aula Tratamento de Exceções
Aula Tratamento de ExceçõesAula Tratamento de Exceções
Aula Tratamento de Exceções
Fabio 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 - CSS3
Fabio 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ário
Fabio Moura Pereira
 
Aula Java Swing
Aula Java SwingAula Java Swing
Aula Java Swing
Fabio Moura Pereira
 
Aula 05 - Java Script Básico
Aula 05 -  Java Script BásicoAula 05 -  Java Script Básico
Aula 05 - Java Script Básico
Fabio Moura Pereira
 
Aula de Prolog 06 - Recursão
Aula de Prolog 06 - RecursãoAula de Prolog 06 - Recursão
Aula de Prolog 06 - Recursão
Fabio 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)HTML
Fabio Moura Pereira
 
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
Fabio Moura Pereira
 
Desenvolvimento de Jogos - Mercado Parte 2
Desenvolvimento de Jogos - Mercado Parte 2Desenvolvimento de Jogos - Mercado Parte 2
Desenvolvimento de Jogos - Mercado Parte 2
Fabio Moura Pereira
 
Desenvolvimento de Jogos - Game Design
Desenvolvimento de Jogos - Game DesignDesenvolvimento de Jogos - Game Design
Desenvolvimento de Jogos - Game Design
Fabio Moura Pereira
 
Programação Concorrente - Introdução
Programação Concorrente - IntroduçãoProgramação Concorrente - Introdução
Programação Concorrente - Introdução
Fabio Moura Pereira
 
Desenvolvimento de Sistemas Web - Conceitos Básicos
Desenvolvimento de Sistemas Web - Conceitos BásicosDesenvolvimento de Sistemas Web - Conceitos Básicos
Desenvolvimento de Sistemas Web - Conceitos Básicos
Fabio Moura Pereira
 
Desenvolvimento de Jogos - Mercado Parte 1
Desenvolvimento de Jogos - Mercado Parte 1Desenvolvimento de Jogos - Mercado Parte 1
Desenvolvimento de Jogos - Mercado Parte 1
Fabio Moura Pereira
 
PHP - Strings
PHP - StringsPHP - Strings
PHP - Strings
Fabio Moura Pereira
 

Destaque (20)

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
 
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
 
Aula 05 - Java Script Básico
Aula 05 -  Java Script BásicoAula 05 -  Java Script Básico
Aula 05 - Java Script Básico
 
Aula de Prolog 06 - Recursão
Aula de Prolog 06 - RecursãoAula de Prolog 06 - Recursão
Aula de Prolog 06 - Recursão
 
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
 
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
 
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 - Game Design
Desenvolvimento de Jogos - Game DesignDesenvolvimento de Jogos - Game Design
Desenvolvimento de Jogos - Game Design
 
Programação Concorrente - Introdução
Programação Concorrente - IntroduçãoProgramação Concorrente - Introdução
Programação Concorrente - Introdução
 
Desenvolvimento de Sistemas Web - Conceitos Básicos
Desenvolvimento de Sistemas Web - Conceitos BásicosDesenvolvimento de Sistemas Web - Conceitos Básicos
Desenvolvimento de Sistemas Web - Conceitos Básicos
 
Desenvolvimento de Jogos - Mercado Parte 1
Desenvolvimento de Jogos - Mercado Parte 1Desenvolvimento de Jogos - Mercado Parte 1
Desenvolvimento de Jogos - Mercado Parte 1
 
PHP - Strings
PHP - StringsPHP - Strings
PHP - Strings
 

Semelhante a Aula Prolog 03

Atividades de Teste e Cobertura de Código em Java
Atividades de Teste e Cobertura de Código em JavaAtividades de Teste e Cobertura de Código em Java
Atividades de Teste e Cobertura de Código em Java
aceiro
 
7-Prolog-Base (2).pdf
7-Prolog-Base (2).pdf7-Prolog-Base (2).pdf
7-Prolog-Base (2).pdf
SofiaPiteira
 
TDC2018FLN | Trilha Python - Do nada, tudo se constrói. Test-Driven Developme...
TDC2018FLN | Trilha Python - Do nada, tudo se constrói. Test-Driven Developme...TDC2018FLN | Trilha Python - Do nada, tudo se constrói. Test-Driven Developme...
TDC2018FLN | Trilha Python - Do nada, tudo se constrói. Test-Driven Developme...
tdc-globalcode
 
Conceito de funçao e modularizaçao
Conceito de funçao e modularizaçaoConceito de funçao e modularizaçao
Conceito de funçao e modularizaçao
ssuserc6132d
 
Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011
Luís Cobucci
 
Não tem teste ? Já nasceu legado.
Não tem teste ? Já nasceu legado.Não tem teste ? Já nasceu legado.
Não tem teste ? Já nasceu legado.
GTS-CE
 
Mini curso GOLANG
Mini curso GOLANGMini curso GOLANG
Mini curso GOLANG
Abraão Állysson
 
Aprendizado de Máquina em Linguagem Natural
Aprendizado de Máquina em Linguagem NaturalAprendizado de Máquina em Linguagem Natural
Aprendizado de Máquina em Linguagem Natural
Beatriz Albiero
 
Recursividade
RecursividadeRecursividade
Recursividade
Raphael Leite Campos
 
TDC2016SP - Trilha Programação Funcional
TDC2016SP - Trilha Programação FuncionalTDC2016SP - Trilha Programação Funcional
TDC2016SP - Trilha Programação Funcional
tdc-globalcode
 
Palestra Ministrada no 3 Encontro do GTS-CE
Palestra Ministrada no 3 Encontro do GTS-CEPalestra Ministrada no 3 Encontro do GTS-CE
Palestra Ministrada no 3 Encontro do GTS-CE
Hedley Luna
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Luís Cobucci
 
Backtracking
BacktrackingBacktracking
01-Paradigmas.pdf
01-Paradigmas.pdf01-Paradigmas.pdf
01-Paradigmas.pdf
AmlieOGalaxias
 
Automatizando seus testes com robot framework
Automatizando seus testes com robot frameworkAutomatizando seus testes com robot framework
Automatizando seus testes com robot framework
Claudenir Freitas
 
Algoritmos
AlgoritmosAlgoritmos
Programação Lógica com Restrições
Programação Lógica com RestriçõesProgramação Lógica com Restrições
Programação Lógica com Restrições
Antonio Fonseca Pimenta Junior
 
Palestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnitPalestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnit
Robinson Castilho
 
Resumo computação I
Resumo computação IResumo computação I
Resumo computação I
Érick Barbosa de Souza
 
Testes de unidade e TDD SoLiSC 2011
Testes de unidade e TDD SoLiSC 2011Testes de unidade e TDD SoLiSC 2011
Testes de unidade e TDD SoLiSC 2011
Luís Cobucci
 

Semelhante a Aula Prolog 03 (20)

Atividades de Teste e Cobertura de Código em Java
Atividades de Teste e Cobertura de Código em JavaAtividades de Teste e Cobertura de Código em Java
Atividades de Teste e Cobertura de Código em Java
 
7-Prolog-Base (2).pdf
7-Prolog-Base (2).pdf7-Prolog-Base (2).pdf
7-Prolog-Base (2).pdf
 
TDC2018FLN | Trilha Python - Do nada, tudo se constrói. Test-Driven Developme...
TDC2018FLN | Trilha Python - Do nada, tudo se constrói. Test-Driven Developme...TDC2018FLN | Trilha Python - Do nada, tudo se constrói. Test-Driven Developme...
TDC2018FLN | Trilha Python - Do nada, tudo se constrói. Test-Driven Developme...
 
Conceito de funçao e modularizaçao
Conceito de funçao e modularizaçaoConceito de funçao e modularizaçao
Conceito de funçao e modularizaçao
 
Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011
 
Não tem teste ? Já nasceu legado.
Não tem teste ? Já nasceu legado.Não tem teste ? Já nasceu legado.
Não tem teste ? Já nasceu legado.
 
Mini curso GOLANG
Mini curso GOLANGMini curso GOLANG
Mini curso GOLANG
 
Aprendizado de Máquina em Linguagem Natural
Aprendizado de Máquina em Linguagem NaturalAprendizado de Máquina em Linguagem Natural
Aprendizado de Máquina em Linguagem Natural
 
Recursividade
RecursividadeRecursividade
Recursividade
 
TDC2016SP - Trilha Programação Funcional
TDC2016SP - Trilha Programação FuncionalTDC2016SP - Trilha Programação Funcional
TDC2016SP - Trilha Programação Funcional
 
Palestra Ministrada no 3 Encontro do GTS-CE
Palestra Ministrada no 3 Encontro do GTS-CEPalestra Ministrada no 3 Encontro do GTS-CE
Palestra Ministrada no 3 Encontro do GTS-CE
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
 
Backtracking
BacktrackingBacktracking
Backtracking
 
01-Paradigmas.pdf
01-Paradigmas.pdf01-Paradigmas.pdf
01-Paradigmas.pdf
 
Automatizando seus testes com robot framework
Automatizando seus testes com robot frameworkAutomatizando seus testes com robot framework
Automatizando seus testes com robot framework
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Programação Lógica com Restrições
Programação Lógica com RestriçõesProgramação Lógica com Restrições
Programação Lógica com Restrições
 
Palestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnitPalestra Testes Unidade Com JUnit
Palestra Testes Unidade Com JUnit
 
Resumo computação I
Resumo computação IResumo computação I
Resumo computação I
 
Testes de unidade e TDD SoLiSC 2011
Testes de unidade e TDD SoLiSC 2011Testes de unidade e TDD SoLiSC 2011
Testes de unidade e TDD SoLiSC 2011
 

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ência
Fabio 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ção
Fabio 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
 
Padrões de Projeto de Software
Padrões de Projeto de SoftwarePadrões de Projeto de Software
Padrões de Projeto de Software
Fabio Moura Pereira
 
Curso de PHP - Objetos
Curso de PHP - ObjetosCurso de PHP - Objetos
Curso de PHP - Objetos
Fabio Moura Pereira
 
Curso de PHP - Arrays
Curso de PHP - ArraysCurso de PHP - Arrays
Curso de PHP - Arrays
Fabio Moura Pereira
 
PHP - Funções
PHP - FunçõesPHP - Funções
PHP - Funções
Fabio Moura Pereira
 
PHP - Introdução
PHP - IntroduçãoPHP - Introdução
PHP - Introdução
Fabio 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 - Objetos
Curso de PHP - ObjetosCurso de PHP - Objetos
Curso de PHP - Objetos
 
Curso de PHP - Arrays
Curso de PHP - ArraysCurso de PHP - Arrays
Curso de PHP - Arrays
 
PHP - Funções
PHP - FunçõesPHP - Funções
PHP - Funções
 
PHP - Introdução
PHP - IntroduçãoPHP - Introdução
PHP - Introdução
 

Último

DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdfDESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
Momento da Informática
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
joaovmp3
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
WELITONNOGUEIRA3
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
TomasSousa7
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
Momento da Informática
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
Faga1939
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
Danilo Pinotti
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
Momento da Informática
 

Último (8)

DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdfDESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
 

Aula Prolog 03

  • 1. Programação em LógicaProgramação em Lógica MatemáticaMatemática PrologProlog – 03 –– 03 – 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. PrologProlog ►Consultas CombinadasConsultas Combinadas ►Predicados InternosPredicados Internos ►ExercíciosExercícios
  • 3. Consultas Combinadas (1)Consultas Combinadas (1) ► Consultas simples podem ser combinadas paraConsultas simples podem ser combinadas para formar consultas complexasformar consultas complexas ► Exemplo:Exemplo:  Quais objetos comestíveis estão na cozinha?Quais objetos comestíveis estão na cozinha? ?-?- local(X, cozinha), comestivel(X).local(X, cozinha), comestivel(X). ► Uma consulta combinada possui umaUma consulta combinada possui uma conjunçãoconjunção dede objetivosobjetivos  A vírgula separando os objetivos é lida como “e”A vírgula separando os objetivos é lida como “e”  Existe um X, tal que X esteja localizado na cozinhaExiste um X, tal que X esteja localizado na cozinha ee X éX é comestível?comestível? ► Se uma mesma variável aparece mais de uma vezSe uma mesma variável aparece mais de uma vez em um consulta, ela deve ter o mesmo valor emem um consulta, ela deve ter o mesmo valor em todos os locais em que aparecetodos os locais em que aparece
  • 4. Consultas Combinadas (2)Consultas Combinadas (2) ► O nome de uma variável não possui nenhumO nome de uma variável não possui nenhum significado em qualquer outra consulta, ou cláusulasignificado em qualquer outra consulta, ou cláusula do banco de dadosdo banco de dados  Se X aparece em outras consultas ou cláusulas, aSe X aparece em outras consultas ou cláusulas, a consulta ou cláusula possui a sua própria cópia daconsulta ou cláusula possui a sua própria cópia da variávelvariável  Dizemos que oDizemos que o escopoescopo de uma variável lógica é umade uma variável lógica é uma consultaconsulta ► Ordem de execuçãoOrdem de execução  Uma consulta combinada inicia chamando o primeiroUma consulta combinada inicia chamando o primeiro objetivo a esquerdaobjetivo a esquerda  Se bem sucedido, o próximo objetivo é chamado com asSe bem sucedido, o próximo objetivo é chamado com as variáveis ligadas como um conjunto do objetivo préviovariáveis ligadas como um conjunto do objetivo prévio  Se a consulta termina via portaSe a consulta termina via porta exitexit do objetivo mais ado objetivo mais a direita, ela é bem sucedida e Prolog imprime os valoresdireita, ela é bem sucedida e Prolog imprime os valores da tabela de variáveisda tabela de variáveis
  • 5. Consultas Combinadas (3)Consultas Combinadas (3) ► Ordem de execução (cont.)Ordem de execução (cont.)  Se um usuário digita um ponto e vírgula (;) após umaSe um usuário digita um ponto e vírgula (;) após uma resposta, a consulta é retomada na portaresposta, a consulta é retomada na porta redoredo dodo objetivo mais a direitaobjetivo mais a direita  Somente as variáveis ligadas deste conjunto sãoSomente as variáveis ligadas deste conjunto são desfeitasdesfeitas  Se a consulta termina via portaSe a consulta termina via porta failfail do objetivo mais ado objetivo mais a esquerda, a consulta falhaesquerda, a consulta falha  Utilize o debug para acompanhar o processoUtilize o debug para acompanhar o processo variables query out no ; Goal 1 Goal 2
  • 6. ExemploExemplo ►?-?- local(X, cozinha), comestivel(X).local(X, cozinha), comestivel(X). [debug] ?- local(X, cozinha), comestivel(X). Call: (7) local(_G283, cozinha) ? creep Exit: (7) local(maçã, cozinha) ? creep Call: (7) comestivel(maçã) ? creep Exit: (7) comestivel(maçã) ? creep X = maçã ; Fail: (7) comestivel(maçã) ? creep Redo: (7) local(_G283, cozinha) ? creep Exit: (7) local(brócolis, cozinha) ? creep Call: (7) comestivel(brócolis) ? creep Fail: (7) comestivel(brócolis) ? creep Redo: (7) local(_G283, cozinha) ? creep Exit: (7) local(biscoito, cozinha) ? creep Call: (7) comestivel(biscoito) ? creep Exit: (7) comestivel(biscoito) ? creep X = biscoito ; Fail: (7) comestivel(biscoito) ? creep Redo: (7) local(_G283, cozinha) ? creep Fail: (7) local(_G283, cozinha) ? creep No
  • 7. Exemplo com Duas VariáveisExemplo com Duas Variáveis ►Liste todos os objetos localizados em salasListe todos os objetos localizados em salas adjacentes à cozinhaadjacentes à cozinha ►Em termos lógicos:Em termos lógicos:  Encontre T e R de modo que exista uma porta daEncontre T e R de modo que exista uma porta da cozinha para R e T está localizado em Rcozinha para R e T está localizado em R ?- porta(cozinha, R), local(T,R). R = escritório T = escrivaninha; R = escritório T = computador; R = porão T = ‘máquina de lavar’; No
  • 8. Predicados Internos (1)Predicados Internos (1) ► Até este ponto vimos qual o formato utilizado porAté este ponto vimos qual o formato utilizado por Prolog para nos responder às consultasProlog para nos responder às consultas ► A partir de agora veremos como gerar consultasA partir de agora veremos como gerar consultas personalizadas de acordo com nossaspersonalizadas de acordo com nossas necessidadesnecessidades ► Características de Predicados InternosCaracterísticas de Predicados Internos  Não existem cláusulas no banco de dados paraNão existem cláusulas no banco de dados para predicados internospredicados internos  Um predicado interno é predefinido por PrologUm predicado interno é predefinido por Prolog  São normalmente escritos na linguagem usada paraSão normalmente escritos na linguagem usada para implementar o Prologimplementar o Prolog  Podem realizar funções não relacionadas com o teoremaPodem realizar funções não relacionadas com o teorema de prova lógicade prova lógica  São chamados as vezes de predicados extra-lógicosSão chamados as vezes de predicados extra-lógicos
  • 9. Predicados Internos (2)Predicados Internos (2) ►Veremos os predicados internos à medidaVeremos os predicados internos à medida que precisemos delesque precisemos deles ►Predicados de entrada/saída usados paraPredicados de entrada/saída usados para imprimir uma consultaimprimir uma consulta  write/1write/1 – imprime o seu argumento na tela,– imprime o seu argumento na tela, sempre falha em um backtrackingsempre falha em um backtracking  nl/0nl/0 – inicia uma nova linha– inicia uma nova linha  tab/1tab/1 – espera um inteiro como argumento e– espera um inteiro como argumento e tabula o número de espaçostabula o número de espaços  fail/0fail/0 – provoca uma falha, ou seja, passa o– provoca uma falha, ou seja, passa o controle imediatamente para uma porta redocontrole imediatamente para uma porta redo
  • 10. ExemplosExemplos ►Listar todos os objetos que estão na cozinhaListar todos os objetos que estão na cozinha ?-?- local(X, cozinha), write(X), nl, fail.local(X, cozinha), write(X), nl, fail. maçãmaçã brócolisbrócolis biscoitobiscoito NoNo ?-?- local(X, cozinha), write(X), tab(8), fail.local(X, cozinha), write(X), tab(8), fail. maçã brócolis biscoitomaçã brócolis biscoito
  • 11. Exercícios (1)Exercícios (1) ► Considere o banco de dados PrologConsidere o banco de dados Prolog ► Quais os resultados das seguintes consultas?Quais os resultados das seguintes consultas?  ?-?- gizmo(a,X), easy(X).gizmo(a,X), easy(X).  ?-?- gizmo(c,X), easy(X).gizmo(c,X), easy(X).  ?-?- gizmo(d,Z), easy(Z).gizmo(d,Z), easy(Z).  ?-?- easy(Y), gizmo(X,Y).easy(Y), gizmo(X,Y).  ?-?- write(‘report’), nl, easy(T), write(T), gizmo(M, T), tab(2), write(M),write(‘report’), nl, easy(T), write(T), gizmo(M, T), tab(2), write(M), fail.fail.  ?-?- write(‘buggy’), nl, easy(Z), write(X), gizmo(Z,X), tab(2), write(Z),write(‘buggy’), nl, easy(Z), write(X), gizmo(Z,X), tab(2), write(Z), fail.fail.  ?-?- easy(X), harder(Y, X).easy(X), harder(Y, X). easy(1). easy(2). easy(3). gizmo(a,1). gizmo(b,3). gizmo(a,2). gizmo(d,5). gizmo(c,3). gizmo(a,3). gizmo(c,4). harder(a,1). harder(c,X). harder(b,4). harder(d,2).
  • 12. Exercícios (2)Exercícios (2) ► Qual o resultado da consulta?Qual o resultado da consulta? ?-?- porta(cozinha, R), write(R), nl, local(T, R), tab(3),porta(cozinha, R), write(R), nl, local(T, R), tab(3), write(T), nl, fail.write(T), nl, fail. ► Banco de Dados GenealógicoBanco de Dados Genealógico  Encontre alguém que seja mãeEncontre alguém que seja mãe ?-?- pais(X, Alguem), mulher(X).pais(X, Alguem), mulher(X).  Escreva consultas similares para pai, filho e filhaEscreva consultas similares para pai, filho e filha  Rastreie a execução e compare:Rastreie a execução e compare: ?-?- pais(X, Alguem), mulher(X).pais(X, Alguem), mulher(X). ?-?- mulher(X), pais(X, Alguem).mulher(X), pais(X, Alguem).  Elas possuem as mesmas respostas?Elas possuem as mesmas respostas?  Escreva consultas para encontrar avós, avôs e bisavôsEscreva consultas para encontrar avós, avôs e bisavôs
  • 13. O que vem a seguir?O que vem a seguir? ►RegrasRegras ►AritméticaAritmética ►......