SlideShare a Scribd company logo
1 of 27
Download to read offline
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

More Related Content

What's hot

Java: Manipulação de Arquivos
Java:  Manipulação  de ArquivosJava:  Manipulação  de Arquivos
Java: Manipulação de ArquivosArthur Emanuel
 
Arrays (vetores) em Java
Arrays (vetores) em JavaArrays (vetores) em Java
Arrays (vetores) em JavaDaniel Brandão
 
Poo encapsulamento
Poo encapsulamentoPoo encapsulamento
Poo encapsulamentoSedu
 
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADEstrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADLeinylson Fontinele
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POODaniel Brandão
 
ICC - Aula 05 - Estrutura de controle, sequencial e condicional
ICC - Aula 05 - Estrutura de controle, sequencial e condicionalICC - Aula 05 - Estrutura de controle, sequencial e condicional
ICC - Aula 05 - Estrutura de controle, sequencial e condicionalFelipe J. R. Vieira
 
Aula 9 - Resultado Operandos Matemáticos, Operadores Aritmeticos, Relacionais...
Aula 9 - Resultado Operandos Matemáticos, Operadores Aritmeticos, Relacionais...Aula 9 - Resultado Operandos Matemáticos, Operadores Aritmeticos, Relacionais...
Aula 9 - Resultado Operandos Matemáticos, Operadores Aritmeticos, Relacionais...André Constantino da Silva
 
Programação orientada a objetos – II
Programação orientada a objetos – IIProgramação orientada a objetos – II
Programação orientada a objetos – IIGabriel Faustino
 
Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPDaniel Brandão
 
Estrutura de Dados - PILHAS
Estrutura de Dados - PILHASEstrutura de Dados - PILHAS
Estrutura de Dados - PILHASAparicio Junior
 
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)Janynne Gomes
 
Oficina: Introdução à programação com Python e seus recursos: algoritmos e ló...
Oficina: Introdução à programação com Python e seus recursos: algoritmos e ló...Oficina: Introdução à programação com Python e seus recursos: algoritmos e ló...
Oficina: Introdução à programação com Python e seus recursos: algoritmos e ló...Jackson Meires
 
Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasAdriano Teixeira de Souza
 

What's hot (20)

Java: Manipulação de Arquivos
Java:  Manipulação  de ArquivosJava:  Manipulação  de Arquivos
Java: Manipulação de Arquivos
 
IA Prolog
IA PrologIA Prolog
IA Prolog
 
Arrays (vetores) em Java
Arrays (vetores) em JavaArrays (vetores) em Java
Arrays (vetores) em Java
 
Poo encapsulamento
Poo encapsulamentoPoo encapsulamento
Poo encapsulamento
 
Modularização
ModularizaçãoModularização
Modularização
 
Aula 4 - Estruturas condicionais
Aula 4 - Estruturas condicionaisAula 4 - Estruturas condicionais
Aula 4 - Estruturas condicionais
 
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADEstrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
 
Conectividade em grafos
Conectividade em grafosConectividade em grafos
Conectividade em grafos
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
 
ICC - Aula 05 - Estrutura de controle, sequencial e condicional
ICC - Aula 05 - Estrutura de controle, sequencial e condicionalICC - Aula 05 - Estrutura de controle, sequencial e condicional
ICC - Aula 05 - Estrutura de controle, sequencial e condicional
 
Aula 9 - Resultado Operandos Matemáticos, Operadores Aritmeticos, Relacionais...
Aula 9 - Resultado Operandos Matemáticos, Operadores Aritmeticos, Relacionais...Aula 9 - Resultado Operandos Matemáticos, Operadores Aritmeticos, Relacionais...
Aula 9 - Resultado Operandos Matemáticos, Operadores Aritmeticos, Relacionais...
 
Programação orientada a objetos – II
Programação orientada a objetos – IIProgramação orientada a objetos – II
Programação orientada a objetos – II
 
Aula Prolog 09 - Listas
Aula Prolog 09 - ListasAula Prolog 09 - Listas
Aula Prolog 09 - Listas
 
POO - 14 - Vetores
POO - 14 - VetoresPOO - 14 - Vetores
POO - 14 - Vetores
 
Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHP
 
POO - 21 - Java e Banco de Dados
POO - 21 - Java e Banco de DadosPOO - 21 - Java e Banco de Dados
POO - 21 - Java e Banco de Dados
 
Estrutura de Dados - PILHAS
Estrutura de Dados - PILHASEstrutura de Dados - PILHAS
Estrutura de Dados - PILHAS
 
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)Aula 4  - Diagrama Entidade Relacionamento (com exercício no final)
Aula 4 - Diagrama Entidade Relacionamento (com exercício no final)
 
Oficina: Introdução à programação com Python e seus recursos: algoritmos e ló...
Oficina: Introdução à programação com Python e seus recursos: algoritmos e ló...Oficina: Introdução à programação com Python e seus recursos: algoritmos e ló...
Oficina: Introdução à programação com Python e seus recursos: algoritmos e ló...
 
Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listas
 

Similar to 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
 

Similar to Introdução à linguagem Prolog: conceitos básicos e exemplos (20)

Programacao logica
Programacao logicaProgramacao logica
Programacao logica
 
Minicurso Prolog
Minicurso PrologMinicurso Prolog
Minicurso Prolog
 
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
 

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