SlideShare ist ein Scribd-Unternehmen logo
1 von 27
Downloaden Sie, um offline zu lesen
Linguagem Prolog
INTELIGÊNCIA COMPUTACIONAL – 2015.1
ALUNO: ANTONIO RUFINO DE LIMA NETO
O que é?
 PROgrammation en LOGique;
 Programação em Lógica Matemática;
 Inteligência artificial e linguística computacional;
 Criação:
 1972
 Alain Colmerauer e Robert Kowalski
 Teorema da resolução com Cláusulas de Horn
 H :- B1, …, Bn..
Elementos da Linguagem - Átomos
 Definição: cadeias compostas pelos seguintes caracteres:
 Letras Maiúsculas: A,..., Z
 Letras Minúsculas: a,..., z
 Dígitos: 0, 1,..., 9
 Caracteres especiais: *, +, _, -, >, <, =, :, ~
 Composição de Átomos:
 Cadeias começando com letras minúsculas. Ex.: x_y, maria,
curso_de_IA
 Cadeias de caracteres especiais. Ex.: <---->, ::=
 Cadeias de caracteres entre apóstrofos. Ex.: ‘Maria’, ‘casa branca’, ‘a’
Elementos da Linguagem - Átomos
 Números: 1, 2.45, -20;
 Variáveis: são cadeias de letras, dígitos e o caractere “_”;
 Iguais a átomos, porém começados por letras maiúsculas;
 Ex.: X, Mapa_da_mina, _nome;
Elementos da Linguagem - Fatos
 Estabelecer um relacionamento existente entre objetos;
 relação(objeto1, ..., objeton);
 Identificadores de relacionamentos são denominados predicados;
 Identificadores de objetos são denominados átomos;
 Tanto predicados quanto átomos devem iniciar com letra
minúscula;
Elementos da Linguagem - Fatos
 Estrutura de um fato
gosta(joao, maria).
Nome do predicado
 Estrutura de uma regra
 gosta(joao, X) :- gosta(X, vinho), gosta(X, futebol)
 a -: b ; c ; d
Parâmetros
Conjunção
Disjunção
Elementos da Linguagem
 Predicado “is”
 Predicado usado em operações aritméticas;
 Ex: ?- X is 2+3.
 Resposta: X = 5.
 Operadores aritméticos:
 + (adição), - (subtração), * (multiplicação), mod (resto), / (divisão real),
// (divisão inteira) e ^ (potenciação).
Elementos da Linguagem
 Operadores relacionais
 X = Y X e Y são iguais;
 X = Y X e Y são diferentes;
 X < Y X é menor que Y;
 X > Y X é maior que Y;
 X =< Y X é menor ou igual a Y;
 X >= Y X é maior ou igual a Y.
 X =:= Y X e Y são iguais (p/ números);
 X == Y X e Y são diferentes (p/ números).
Elementos da Linguagem
 Predicado “write()”.
 Predicado específico para imprimir na tela;
 Exemplo: write(“olá”);
 writef(Formato, Argumentos);
 Opções de formatação:
 %w - imprime o termo;
 %d - imprime o termo ignorando seu tipo, por exemplo, n é impresso
como uma string. • %s - imprime o termo como uma string; 7
 %Nc - imprime o termo de modo centralizado numa quantidade N de
colunas;
Elementos da Linguagem
 Mais Predicado writef(Formato, Argumentos);
 %Nl - imprime o termo alinhado à esquerda numa quantidade N de
colunas;
 %Nr - imprime o termo alinhado à direita numa quantidade N de
colunas; Para gerar alguns caracteres deve se usar seqüencias de
escape, estas são:
 n - cria uma nova linha;
 l - criar um separador de linha, o resultado é igual ao produzido por
n;
 r - retorna ao início da linha;
 t - tabulação; •
 % - imprime o símbolo %;
 nnn - onde n é um número decimal, produz o caractere ASCII com o
código informado.
Programa em Prolog
 Uma árvore genealógica.
 pai(adão,cain).
 pai(adão,abel).
 pai(adão,seth).
 pai(seth,enos).
 Consultas:
 ?- pai(adão,cain).
 Resposta: true
 ?- pai(adão,enos).
 Reposta: false
Programa em Prolog
 Consulta com variável:
 ?- pai(X,abel).
 Resposta: X = adão.
 Obs: lembrando que variável com inicial maiúscula;
 Consulta com várias variáveis:
 ?- pai(adão,X).
 Resposta: X = cain ; X = abel ; X = seth ;
Programa em Prolog
 Nova Regra:
 avô(X,Y) :- pai(X,Z), pai(Z,Y).
 Obs: O ":-" significa "se“;
 Consulta:
 ?- avô(X,enos).
 Resposta: X = adão;
 Outra regra:
 irmão(X,Y) :- pai(Z,X), pai(Z,Y), X=Y.
 Respostas: irmão(cain,abel). irmão(cain,seth). irmão(abel,cain).
irmão(abel,seth). irmão(seth,cain). irmão(seth,abel).
Programa em Prolog - Aritmético
 Programa Exemplo:
 país(Nome, Área, População)
 país(brasil, 9, 130).
 país(china, 12, 1800).
 país(eua, 9, 230).
 país(índia, 3, 450).
 Densidade demográfica:
 país(brasil,A,P), D is P/A.
 A = 9
 P = 130
 D = 14.4444
Programa em Prolog - Aritmético
 "Qual a diferença entre a população da China e da Índia?“
 ?- país(china,_,X), país(índia,_,Y), Z is X-Y.
 X = 1800
 Y = 450
 Z = 1350
 Comparação:
 A área do Brasil é igual à área dos Estados Unidos?
 ?- país(brasil,X,_), país(eua,Y,_), X =:= Y.
 X = 9
 Y = 9
 Yes
Programa em Prolog – If-Else
 if(Condition,Then,Else) :- Condition, !, Then.
 if(_,_,Else) :- Else.
 Operador !: A execução do predicado ! (corte) poda todos os ramos
ainda não explorados;
 Caso a Condition seja verdadeira, o if nem verifica o Else, vai direto
para o Then.
 Ex. 1: ?- if(8 mod 2 =:= 0, write(par), write(ímpar)).
 Usando a primeira cláusula do Programa, temos:
 Condition = 8 mod 2 =:= 0
 Then = write(par)
 Else = write(ímpar);
Programa em Prolog – If-Else (cont)
 e a consulta é reduzida a três objetivos:
 ?- 8 mod 2 =:= 0, !, write(par).
 Como a condição expressa pelo primeiro objetivo é verdadeira,
mais uma redução é feita pelo sistema e obtemos
 ?- !, write(par).
 Agora o corte é executado, fazendo com que a segunda cláusula
do programa seja descartada, e a consulta torna-se
 ?- write(par).
 Finalmente, executando-se write, a palavra par é exibida no vídeo
e o processo termina.
Programa em Prolog – If-Else (cont)
 Ex. 2: ?- if(5 mod 2 =:= 0, write(par), write(ímpar)).
 Novamente a primeira cláusula é selecionada e obtemos
 ?- 8 mod 2 =:= 0, !, write(par).
 Nesse caso, porém, como a condição expressa pelo primeiro
objetivo é falsa, o corte não chega a ser executado e a segunda
cláusula do programa é, então, selecionada pelo retrocesso.
 write(ímpar).
 A palavra ímpar é exibida no vídeo e o processo termina.
Programa em Prolog – Listas
 Listas são um dos tipos de dados mais úteis existentes na linguagem
Prolog, diz-se que uma lista é uma seqüência ordenada de uma
quantidade qualquer de elementos. Os elementos de uma lista
podem ser de qualquer tipo, tais como, números ou átomos.
 Listas não vazias:
 cabeça - corresponde ao primeiro elemento da lista;
 cauda - corresponde aos elementos restantes da lista.
 Ex: [pam, liz, pat, ann, tom, bob, jim];
 Lista vazia:
 []
Programa em Prolog – Listas (cont)
 É possível separar as partes de uma lista utilizando uma barra
vertical, assim, pode-se escrever Lista = [cabeça | cauda]. Com
isso, é possível determinar as seguintes listas:
 [a | b, c] = [a, b, c]
 Exemplo: member(x,y).
 ?− member ( a , [ a , b , c ] ) .
 True;
 ?− member ( a , [ [ a , b ] , c ] ) .
 False;
 ?− member ( [ a , b ] , [ [ a , b ] , c ] ) .
 True;
Programa em Prolog – Listas (cont)
 Contatenação:
 Pode se usar o append(L1,L2,L3).
 Este predicado concatena a lista L1 e L2 exibindo o resultado em L3.
 Exemplo de predicado:
 conc ( [ ] , L , L ) .
 conc ( [X| L1 ] , L2 , [X| L3 ] ) :− conc ( L1 , L2 , L3 ) .
 conc([a,b], [], [a,b]) = true
 conc([a,b], [c,d], [a,b,c,d]) = true
 ?− conc ( [ a , b ] , [ c ] , L ) .
 L = [ a , b , c ] ;
Programa em Prolog – Listas (cont)
 Decompor a lista:
 conc (L1 , L2 , [ a , b , c ] ) .
 L1 = [ ] L2 = [ a , b , c ] ;
 L1 = [ a ] L2 = [ b , c ] ;
 L1 = [ a , b ] L2 = [ c ] ;
 L1 = [ a , b , c ] L2 = [ ] ;
Programa em Prolog – Exemplos
 Descrição: O exemplo clássico para determinar que se todo
homem é mortal e se Sócrates é um homem, então Sócrates é
mortal. Essas a rmações podem ser representadas através das
fórmulas:
 ∀x(homem(x) → mortal(x))
 homem(socrates)
 a partir destas pode-se concluir:
 mortal(socrates)
Programa em Prolog – Exemplos
 Código em Prolog:
 m o r t al (X) :− % Todos os homens são m o r t a i s
 homem(X) ,
 w r i t e f ( `%w%w%w ' , [ ` Sim , ' , X, ` é m o r t al ' ] ) .
 homem( s o c r a t e s ) . % S ó c r a t e s é um homem.
 Consulta:
 m o r t al ( s o c r a t e s ) .
 Sim, socrates é mortal
 Yes
Programa em Prolog – Exemplos
 Fatorial:
 fatorial(0,1) .
 fatorial(N,F) :−
 N > 0,
 N1 is N−1,
 fatorial(N1,F1),
 F is N ∗ F1.
 Consultas:
 fatorial(3,W) .
 W = 6;
Obrigado!
 Duvidas?
Bibliografia
 http://www.ime.usp.br/~slago/slago-prolog.pdf
 https://pt.wikipedia.org/wiki/Prolog
 http://gersonc.anahy.org/graduacao/paradigmas/prologsan.pdf
 http://www.dsc.ufcg.edu.br/~logica/PROLOG/apostila-prolog.pdf

Weitere ähnliche Inhalte

Was ist angesagt?

Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)
Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)
Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)Leinylson Fontinele
 
Aula 4 - Teste de mesa
Aula 4 - Teste de mesaAula 4 - Teste de mesa
Aula 4 - Teste de mesaPacc UAB
 
1.Introdução Banco de Dados
1.Introdução Banco de Dados1.Introdução Banco de Dados
1.Introdução Banco de Dadosvini_campos
 
Programação em Banco de Dados - Aula 23/08/2018
Programação em Banco de Dados - Aula 23/08/2018Programação em Banco de Dados - Aula 23/08/2018
Programação em Banco de Dados - Aula 23/08/2018Elaine Cecília Gatto
 
Aps lista de exercícios
Aps lista de exercíciosAps lista de exercícios
Aps lista de exercíciosGuilherme
 
Apostila Lógica de Programação
Apostila Lógica de ProgramaçãoApostila Lógica de Programação
Apostila Lógica de ProgramaçãoRicardo Terra
 
Aula 01 - JavaScript: Introdução
Aula 01 - JavaScript: IntroduçãoAula 01 - JavaScript: Introdução
Aula 01 - JavaScript: IntroduçãoJessyka Lage
 
Listas em Prolog
Listas em PrologListas em Prolog
Listas em PrologNatã Melo
 
Aula1 - Apresentação de Banco de Dados
Aula1 - Apresentação de Banco de DadosAula1 - Apresentação de Banco de Dados
Aula1 - Apresentação de Banco de DadosRafael Albani
 
Pesquisa e Ordenação Aula 01 - Apresentação
Pesquisa e Ordenação Aula 01 - ApresentaçãoPesquisa e Ordenação Aula 01 - Apresentação
Pesquisa e Ordenação Aula 01 - ApresentaçãoLeinylson Fontinele
 

Was ist angesagt? (20)

Minicurso Prolog
Minicurso PrologMinicurso Prolog
Minicurso Prolog
 
Banco de dados
Banco de dadosBanco de dados
Banco de dados
 
Curso de Desenvolvimento Web - Módulo 03 - JavaScript
Curso de Desenvolvimento Web - Módulo 03 - JavaScriptCurso de Desenvolvimento Web - Módulo 03 - JavaScript
Curso de Desenvolvimento Web - Módulo 03 - JavaScript
 
Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)
Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)
Estrutura de Dados - Aula 15 - Pesquisa de Dados (Árvore de Pesquisa)
 
Paradigmas de programação
Paradigmas de programaçãoParadigmas de programação
Paradigmas de programação
 
Mapeamento objeto relacional
Mapeamento objeto relacionalMapeamento objeto relacional
Mapeamento objeto relacional
 
Curso de Node JS Básico
Curso de Node JS BásicoCurso de Node JS Básico
Curso de Node JS Básico
 
Aula 4 - Teste de mesa
Aula 4 - Teste de mesaAula 4 - Teste de mesa
Aula 4 - Teste de mesa
 
1.Introdução Banco de Dados
1.Introdução Banco de Dados1.Introdução Banco de Dados
1.Introdução Banco de Dados
 
Programação em Banco de Dados - Aula 23/08/2018
Programação em Banco de Dados - Aula 23/08/2018Programação em Banco de Dados - Aula 23/08/2018
Programação em Banco de Dados - Aula 23/08/2018
 
Aula 11 banco de dados
Aula 11   banco de dadosAula 11   banco de dados
Aula 11 banco de dados
 
Aps lista de exercícios
Aps lista de exercíciosAps lista de exercícios
Aps lista de exercícios
 
Apostila Lógica de Programação
Apostila Lógica de ProgramaçãoApostila Lógica de Programação
Apostila Lógica de Programação
 
Aula 9 banco de dados
Aula 9   banco de dadosAula 9   banco de dados
Aula 9 banco de dados
 
Aula 01 - JavaScript: Introdução
Aula 01 - JavaScript: IntroduçãoAula 01 - JavaScript: Introdução
Aula 01 - JavaScript: Introdução
 
Listas em Prolog
Listas em PrologListas em Prolog
Listas em Prolog
 
IA Prolog
IA PrologIA Prolog
IA Prolog
 
Aula1 - Apresentação de Banco de Dados
Aula1 - Apresentação de Banco de DadosAula1 - Apresentação de Banco de Dados
Aula1 - Apresentação de Banco de Dados
 
Aula Prolog 09 - Listas
Aula Prolog 09 - ListasAula Prolog 09 - Listas
Aula Prolog 09 - Listas
 
Pesquisa e Ordenação Aula 01 - Apresentação
Pesquisa e Ordenação Aula 01 - ApresentaçãoPesquisa e Ordenação Aula 01 - Apresentação
Pesquisa e Ordenação Aula 01 - Apresentação
 

Ähnlich wie Introdução à linguagem Prolog: conceitos básicos e exemplos

Aula 11- Algoritmos e Programação.pptx
Aula 11- Algoritmos e Programação.pptxAula 11- Algoritmos e Programação.pptx
Aula 11- Algoritmos e Programação.pptxLemosManuel
 
Conhecendo ou relembrando C
Conhecendo ou relembrando CConhecendo ou relembrando C
Conhecendo ou relembrando CVinícius Hax
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao cprofwtelles
 
Python: a primeira mordida
Python: a primeira mordidaPython: a primeira mordida
Python: a primeira mordidaLuciano Ramalho
 
5 expressoes logicas - operadores - base binaria - operadores de bits
5   expressoes logicas - operadores - base binaria - operadores de bits5   expressoes logicas - operadores - base binaria - operadores de bits
5 expressoes logicas - operadores - base binaria - operadores de bitsRicardo Bolanho
 
Aula 7 decisao - Programação 1
Aula 7 decisao - Programação 1Aula 7 decisao - Programação 1
Aula 7 decisao - Programação 1Isaac Barros
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem Capolllorj
 
Linguagens formais e autômatos
Linguagens formais e autômatosLinguagens formais e autômatos
Linguagens formais e autômatosLuccas Reis
 
Introdução a Python - Python Poli
Introdução a Python  - Python PoliIntrodução a Python  - Python Poli
Introdução a Python - Python PoliRodrigo Lira
 
Palestra python
Palestra pythonPalestra python
Palestra pythonRony Cruch
 
Capitulo 1scilab
Capitulo 1scilabCapitulo 1scilab
Capitulo 1scilabwjunior
 

Ähnlich wie Introdução à linguagem Prolog: conceitos básicos e exemplos (20)

Programacao logica
Programacao logicaProgramacao logica
Programacao logica
 
Lista de exercícios XIV Python para Zumbis
Lista de exercícios XIV Python para ZumbisLista de exercícios XIV Python para Zumbis
Lista de exercícios XIV Python para Zumbis
 
Python 02
Python 02Python 02
Python 02
 
Aula 11- Algoritmos e Programação.pptx
Aula 11- Algoritmos e Programação.pptxAula 11- Algoritmos e Programação.pptx
Aula 11- Algoritmos e Programação.pptx
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 
Conhecendo ou relembrando C
Conhecendo ou relembrando CConhecendo ou relembrando C
Conhecendo ou relembrando C
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Aula 2 aed - pseudocódigo
Aula 2   aed - pseudocódigoAula 2   aed - pseudocódigo
Aula 2 aed - pseudocódigo
 
Algop - aula 04 pascal 1
Algop - aula 04 pascal 1Algop - aula 04 pascal 1
Algop - aula 04 pascal 1
 
Python: a primeira mordida
Python: a primeira mordidaPython: a primeira mordida
Python: a primeira mordida
 
5 expressoes logicas - operadores - base binaria - operadores de bits
5   expressoes logicas - operadores - base binaria - operadores de bits5   expressoes logicas - operadores - base binaria - operadores de bits
5 expressoes logicas - operadores - base binaria - operadores de bits
 
Aula 7 decisao - Programação 1
Aula 7 decisao - Programação 1Aula 7 decisao - Programação 1
Aula 7 decisao - Programação 1
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
 
Linguagens formais e autômatos
Linguagens formais e autômatosLinguagens formais e autômatos
Linguagens formais e autômatos
 
Introdução a Python - Python Poli
Introdução a Python  - Python PoliIntrodução a Python  - Python Poli
Introdução a Python - Python Poli
 
Aula01
Aula01Aula01
Aula01
 
First Order Logic
First Order LogicFirst Order Logic
First Order Logic
 
Palestra python
Palestra pythonPalestra python
Palestra python
 
Capitulo 1scilab
Capitulo 1scilabCapitulo 1scilab
Capitulo 1scilab
 

Introdução à linguagem Prolog: conceitos básicos e exemplos

  • 1. Linguagem Prolog INTELIGÊNCIA COMPUTACIONAL – 2015.1 ALUNO: ANTONIO RUFINO DE LIMA NETO
  • 2. O que é?  PROgrammation en LOGique;  Programação em Lógica Matemática;  Inteligência artificial e linguística computacional;  Criação:  1972  Alain Colmerauer e Robert Kowalski  Teorema da resolução com Cláusulas de Horn  H :- B1, …, Bn..
  • 3. Elementos da Linguagem - Átomos  Definição: cadeias compostas pelos seguintes caracteres:  Letras Maiúsculas: A,..., Z  Letras Minúsculas: a,..., z  Dígitos: 0, 1,..., 9  Caracteres especiais: *, +, _, -, >, <, =, :, ~  Composição de Átomos:  Cadeias começando com letras minúsculas. Ex.: x_y, maria, curso_de_IA  Cadeias de caracteres especiais. Ex.: <---->, ::=  Cadeias de caracteres entre apóstrofos. Ex.: ‘Maria’, ‘casa branca’, ‘a’
  • 4. Elementos da Linguagem - Átomos  Números: 1, 2.45, -20;  Variáveis: são cadeias de letras, dígitos e o caractere “_”;  Iguais a átomos, porém começados por letras maiúsculas;  Ex.: X, Mapa_da_mina, _nome;
  • 5. Elementos da Linguagem - Fatos  Estabelecer um relacionamento existente entre objetos;  relação(objeto1, ..., objeton);  Identificadores de relacionamentos são denominados predicados;  Identificadores de objetos são denominados átomos;  Tanto predicados quanto átomos devem iniciar com letra minúscula;
  • 6. Elementos da Linguagem - Fatos  Estrutura de um fato gosta(joao, maria). Nome do predicado  Estrutura de uma regra  gosta(joao, X) :- gosta(X, vinho), gosta(X, futebol)  a -: b ; c ; d Parâmetros Conjunção Disjunção
  • 7. Elementos da Linguagem  Predicado “is”  Predicado usado em operações aritméticas;  Ex: ?- X is 2+3.  Resposta: X = 5.  Operadores aritméticos:  + (adição), - (subtração), * (multiplicação), mod (resto), / (divisão real), // (divisão inteira) e ^ (potenciação).
  • 8. Elementos da Linguagem  Operadores relacionais  X = Y X e Y são iguais;  X = Y X e Y são diferentes;  X < Y X é menor que Y;  X > Y X é maior que Y;  X =< Y X é menor ou igual a Y;  X >= Y X é maior ou igual a Y.  X =:= Y X e Y são iguais (p/ números);  X == Y X e Y são diferentes (p/ números).
  • 9. Elementos da Linguagem  Predicado “write()”.  Predicado específico para imprimir na tela;  Exemplo: write(“olá”);  writef(Formato, Argumentos);  Opções de formatação:  %w - imprime o termo;  %d - imprime o termo ignorando seu tipo, por exemplo, n é impresso como uma string. • %s - imprime o termo como uma string; 7  %Nc - imprime o termo de modo centralizado numa quantidade N de colunas;
  • 10. Elementos da Linguagem  Mais Predicado writef(Formato, Argumentos);  %Nl - imprime o termo alinhado à esquerda numa quantidade N de colunas;  %Nr - imprime o termo alinhado à direita numa quantidade N de colunas; Para gerar alguns caracteres deve se usar seqüencias de escape, estas são:  n - cria uma nova linha;  l - criar um separador de linha, o resultado é igual ao produzido por n;  r - retorna ao início da linha;  t - tabulação; •  % - imprime o símbolo %;  nnn - onde n é um número decimal, produz o caractere ASCII com o código informado.
  • 11. Programa em Prolog  Uma árvore genealógica.  pai(adão,cain).  pai(adão,abel).  pai(adão,seth).  pai(seth,enos).  Consultas:  ?- pai(adão,cain).  Resposta: true  ?- pai(adão,enos).  Reposta: false
  • 12. Programa em Prolog  Consulta com variável:  ?- pai(X,abel).  Resposta: X = adão.  Obs: lembrando que variável com inicial maiúscula;  Consulta com várias variáveis:  ?- pai(adão,X).  Resposta: X = cain ; X = abel ; X = seth ;
  • 13. Programa em Prolog  Nova Regra:  avô(X,Y) :- pai(X,Z), pai(Z,Y).  Obs: O ":-" significa "se“;  Consulta:  ?- avô(X,enos).  Resposta: X = adão;  Outra regra:  irmão(X,Y) :- pai(Z,X), pai(Z,Y), X=Y.  Respostas: irmão(cain,abel). irmão(cain,seth). irmão(abel,cain). irmão(abel,seth). irmão(seth,cain). irmão(seth,abel).
  • 14. Programa em Prolog - Aritmético  Programa Exemplo:  país(Nome, Área, População)  país(brasil, 9, 130).  país(china, 12, 1800).  país(eua, 9, 230).  país(índia, 3, 450).  Densidade demográfica:  país(brasil,A,P), D is P/A.  A = 9  P = 130  D = 14.4444
  • 15. Programa em Prolog - Aritmético  "Qual a diferença entre a população da China e da Índia?“  ?- país(china,_,X), país(índia,_,Y), Z is X-Y.  X = 1800  Y = 450  Z = 1350  Comparação:  A área do Brasil é igual à área dos Estados Unidos?  ?- país(brasil,X,_), país(eua,Y,_), X =:= Y.  X = 9  Y = 9  Yes
  • 16. Programa em Prolog – If-Else  if(Condition,Then,Else) :- Condition, !, Then.  if(_,_,Else) :- Else.  Operador !: A execução do predicado ! (corte) poda todos os ramos ainda não explorados;  Caso a Condition seja verdadeira, o if nem verifica o Else, vai direto para o Then.  Ex. 1: ?- if(8 mod 2 =:= 0, write(par), write(ímpar)).  Usando a primeira cláusula do Programa, temos:  Condition = 8 mod 2 =:= 0  Then = write(par)  Else = write(ímpar);
  • 17. Programa em Prolog – If-Else (cont)  e a consulta é reduzida a três objetivos:  ?- 8 mod 2 =:= 0, !, write(par).  Como a condição expressa pelo primeiro objetivo é verdadeira, mais uma redução é feita pelo sistema e obtemos  ?- !, write(par).  Agora o corte é executado, fazendo com que a segunda cláusula do programa seja descartada, e a consulta torna-se  ?- write(par).  Finalmente, executando-se write, a palavra par é exibida no vídeo e o processo termina.
  • 18. Programa em Prolog – If-Else (cont)  Ex. 2: ?- if(5 mod 2 =:= 0, write(par), write(ímpar)).  Novamente a primeira cláusula é selecionada e obtemos  ?- 8 mod 2 =:= 0, !, write(par).  Nesse caso, porém, como a condição expressa pelo primeiro objetivo é falsa, o corte não chega a ser executado e a segunda cláusula do programa é, então, selecionada pelo retrocesso.  write(ímpar).  A palavra ímpar é exibida no vídeo e o processo termina.
  • 19. Programa em Prolog – Listas  Listas são um dos tipos de dados mais úteis existentes na linguagem Prolog, diz-se que uma lista é uma seqüência ordenada de uma quantidade qualquer de elementos. Os elementos de uma lista podem ser de qualquer tipo, tais como, números ou átomos.  Listas não vazias:  cabeça - corresponde ao primeiro elemento da lista;  cauda - corresponde aos elementos restantes da lista.  Ex: [pam, liz, pat, ann, tom, bob, jim];  Lista vazia:  []
  • 20. Programa em Prolog – Listas (cont)  É possível separar as partes de uma lista utilizando uma barra vertical, assim, pode-se escrever Lista = [cabeça | cauda]. Com isso, é possível determinar as seguintes listas:  [a | b, c] = [a, b, c]  Exemplo: member(x,y).  ?− member ( a , [ a , b , c ] ) .  True;  ?− member ( a , [ [ a , b ] , c ] ) .  False;  ?− member ( [ a , b ] , [ [ a , b ] , c ] ) .  True;
  • 21. Programa em Prolog – Listas (cont)  Contatenação:  Pode se usar o append(L1,L2,L3).  Este predicado concatena a lista L1 e L2 exibindo o resultado em L3.  Exemplo de predicado:  conc ( [ ] , L , L ) .  conc ( [X| L1 ] , L2 , [X| L3 ] ) :− conc ( L1 , L2 , L3 ) .  conc([a,b], [], [a,b]) = true  conc([a,b], [c,d], [a,b,c,d]) = true  ?− conc ( [ a , b ] , [ c ] , L ) .  L = [ a , b , c ] ;
  • 22. Programa em Prolog – Listas (cont)  Decompor a lista:  conc (L1 , L2 , [ a , b , c ] ) .  L1 = [ ] L2 = [ a , b , c ] ;  L1 = [ a ] L2 = [ b , c ] ;  L1 = [ a , b ] L2 = [ c ] ;  L1 = [ a , b , c ] L2 = [ ] ;
  • 23. Programa em Prolog – Exemplos  Descrição: O exemplo clássico para determinar que se todo homem é mortal e se Sócrates é um homem, então Sócrates é mortal. Essas a rmações podem ser representadas através das fórmulas:  ∀x(homem(x) → mortal(x))  homem(socrates)  a partir destas pode-se concluir:  mortal(socrates)
  • 24. Programa em Prolog – Exemplos  Código em Prolog:  m o r t al (X) :− % Todos os homens são m o r t a i s  homem(X) ,  w r i t e f ( `%w%w%w ' , [ ` Sim , ' , X, ` é m o r t al ' ] ) .  homem( s o c r a t e s ) . % S ó c r a t e s é um homem.  Consulta:  m o r t al ( s o c r a t e s ) .  Sim, socrates é mortal  Yes
  • 25. Programa em Prolog – Exemplos  Fatorial:  fatorial(0,1) .  fatorial(N,F) :−  N > 0,  N1 is N−1,  fatorial(N1,F1),  F is N ∗ F1.  Consultas:  fatorial(3,W) .  W = 6;
  • 27. Bibliografia  http://www.ime.usp.br/~slago/slago-prolog.pdf  https://pt.wikipedia.org/wiki/Prolog  http://gersonc.anahy.org/graduacao/paradigmas/prologsan.pdf  http://www.dsc.ufcg.edu.br/~logica/PROLOG/apostila-prolog.pdf