SlideShare uma empresa Scribd logo
1 de 27
Baixar para ler 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

Mais conteúdo relacionado

Mais procurados

Aula 02 - Tipos de dados, Variáveis, Constantes e Operadores Aritméticos
Aula 02 - Tipos de dados, Variáveis, Constantes e Operadores AritméticosAula 02 - Tipos de dados, Variáveis, Constantes e Operadores Aritméticos
Aula 02 - Tipos de dados, Variáveis, Constantes e Operadores AritméticosMessias Batista
 
Aula 5 encapsulamento, associação, polimorfismo, interfaces
Aula 5   encapsulamento, associação, polimorfismo, interfacesAula 5   encapsulamento, associação, polimorfismo, interfaces
Aula 5 encapsulamento, associação, polimorfismo, interfacesRafael Pinheiro
 
Tipos de Sistemas Operacionais
Tipos de Sistemas OperacionaisTipos de Sistemas Operacionais
Tipos de Sistemas OperacionaisLuciano Crecente
 
amostragem
amostragemamostragem
amostragemsocram01
 
Modelo de documento para levantamento de requisitos de software
Modelo de documento para levantamento de requisitos de softwareModelo de documento para levantamento de requisitos de software
Modelo de documento para levantamento de requisitos de softwareFrancilvio Roberto Alff
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)Armando Daniel
 
Aula 02 - Escolha caso
Aula 02 - Escolha casoAula 02 - Escolha caso
Aula 02 - Escolha casoEder Samaniego
 
Introdução a Linguagem de Programação C
Introdução a Linguagem de Programação CIntrodução a Linguagem de Programação C
Introdução a Linguagem de Programação CGercélia Ramos
 
Aplicação do Cálculo Diferencial e Integral no Estudo de Vigas Isostáticas
Aplicação do Cálculo Diferencial e Integral no Estudo de Vigas IsostáticasAplicação do Cálculo Diferencial e Integral no Estudo de Vigas Isostáticas
Aplicação do Cálculo Diferencial e Integral no Estudo de Vigas Isostáticasdanielceh
 
Aula 1. metodologia científica
Aula 1. metodologia científicaAula 1. metodologia científica
Aula 1. metodologia científicaMarina Atzingen
 
Estrutura de Dados - Aula 01
Estrutura de Dados - Aula 01Estrutura de Dados - Aula 01
Estrutura de Dados - Aula 01thomasdacosta
 
Python - Programação funcional
Python - Programação funcionalPython - Programação funcional
Python - Programação funcionalfabiocerqueira
 
Trabalho de Paradigmas Da Linguagem De Programação - Python
Trabalho de Paradigmas Da Linguagem De Programação - PythonTrabalho de Paradigmas Da Linguagem De Programação - Python
Trabalho de Paradigmas Da Linguagem De Programação - PythonJanderson Campêlo
 
Delineamento experimental básico
Delineamento experimental básicoDelineamento experimental básico
Delineamento experimental básicoCaio Maximino
 

Mais procurados (20)

Aula 02 - Tipos de dados, Variáveis, Constantes e Operadores Aritméticos
Aula 02 - Tipos de dados, Variáveis, Constantes e Operadores AritméticosAula 02 - Tipos de dados, Variáveis, Constantes e Operadores Aritméticos
Aula 02 - Tipos de dados, Variáveis, Constantes e Operadores Aritméticos
 
Aula 5 encapsulamento, associação, polimorfismo, interfaces
Aula 5   encapsulamento, associação, polimorfismo, interfacesAula 5   encapsulamento, associação, polimorfismo, interfaces
Aula 5 encapsulamento, associação, polimorfismo, interfaces
 
Tipos de Sistemas Operacionais
Tipos de Sistemas OperacionaisTipos de Sistemas Operacionais
Tipos de Sistemas Operacionais
 
amostragem
amostragemamostragem
amostragem
 
Modelo de documento para levantamento de requisitos de software
Modelo de documento para levantamento de requisitos de softwareModelo de documento para levantamento de requisitos de software
Modelo de documento para levantamento de requisitos de software
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
 
TDD com Python
TDD com PythonTDD com Python
TDD com Python
 
Aula 02 - Escolha caso
Aula 02 - Escolha casoAula 02 - Escolha caso
Aula 02 - Escolha caso
 
Introdução a Linguagem de Programação C
Introdução a Linguagem de Programação CIntrodução a Linguagem de Programação C
Introdução a Linguagem de Programação C
 
Aplicação do Cálculo Diferencial e Integral no Estudo de Vigas Isostáticas
Aplicação do Cálculo Diferencial e Integral no Estudo de Vigas IsostáticasAplicação do Cálculo Diferencial e Integral no Estudo de Vigas Isostáticas
Aplicação do Cálculo Diferencial e Integral no Estudo de Vigas Isostáticas
 
Python - Introdução
Python - IntroduçãoPython - Introdução
Python - Introdução
 
Conceitos e simulação de cadeias de markov
Conceitos e simulação de cadeias de markovConceitos e simulação de cadeias de markov
Conceitos e simulação de cadeias de markov
 
Aula 1. metodologia científica
Aula 1. metodologia científicaAula 1. metodologia científica
Aula 1. metodologia científica
 
Amostragem - estatistica
Amostragem - estatisticaAmostragem - estatistica
Amostragem - estatistica
 
Manual lindo 6.1
Manual lindo 6.1Manual lindo 6.1
Manual lindo 6.1
 
Estrutura de Dados - Aula 01
Estrutura de Dados - Aula 01Estrutura de Dados - Aula 01
Estrutura de Dados - Aula 01
 
Python - Programação funcional
Python - Programação funcionalPython - Programação funcional
Python - Programação funcional
 
Trabalho de Paradigmas Da Linguagem De Programação - Python
Trabalho de Paradigmas Da Linguagem De Programação - PythonTrabalho de Paradigmas Da Linguagem De Programação - Python
Trabalho de Paradigmas Da Linguagem De Programação - Python
 
Delineamento experimental básico
Delineamento experimental básicoDelineamento experimental básico
Delineamento experimental básico
 
SO-04 Escalonamento de Processos
SO-04 Escalonamento de ProcessosSO-04 Escalonamento de Processos
SO-04 Escalonamento de Processos
 

Semelhante a 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
 

Semelhante a 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