SlideShare une entreprise Scribd logo
1  sur  27
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

Matemática Discreta - Parte V relações
Matemática Discreta - Parte V relaçõesMatemática Discreta - Parte V relações
Matemática Discreta - Parte V relações
Ulrich Schiel
 
Método de Newton-Raphson - @professorenan
Método de Newton-Raphson - @professorenanMétodo de Newton-Raphson - @professorenan
Método de Newton-Raphson - @professorenan
Renan Gustavo
 
57701066 matematica-discreta-exercicios-resolvidos
57701066 matematica-discreta-exercicios-resolvidos57701066 matematica-discreta-exercicios-resolvidos
57701066 matematica-discreta-exercicios-resolvidos
HAROLDO MIRANDA DA COSTA JR
 
Aula 4 modelo relacional
Aula 4   modelo relacionalAula 4   modelo relacional
Aula 4 modelo relacional
Hélio Martins
 

Tendances (20)

Aula 7 profmat - numeros primos e especiais - 06 10-17
Aula 7   profmat - numeros primos e especiais - 06 10-17Aula 7   profmat - numeros primos e especiais - 06 10-17
Aula 7 profmat - numeros primos e especiais - 06 10-17
 
Potenciação - Propriedades das potências
Potenciação - Propriedades das potênciasPotenciação - Propriedades das potências
Potenciação - Propriedades das potências
 
Análise de Algoritmos - Indução Finita
Análise de Algoritmos - Indução FinitaAnálise de Algoritmos - Indução Finita
Análise de Algoritmos - Indução Finita
 
Matemática Discreta - Parte V relações
Matemática Discreta - Parte V relaçõesMatemática Discreta - Parte V relações
Matemática Discreta - Parte V relações
 
Curso Inteligência Artificial - Parte 1 -
Curso Inteligência Artificial - Parte 1 -Curso Inteligência Artificial - Parte 1 -
Curso Inteligência Artificial - Parte 1 -
 
Slide conjuntos
Slide conjuntosSlide conjuntos
Slide conjuntos
 
Método de Newton-Raphson - @professorenan
Método de Newton-Raphson - @professorenanMétodo de Newton-Raphson - @professorenan
Método de Newton-Raphson - @professorenan
 
Arquitetura de Computadores: Álgebra Booleana
Arquitetura de Computadores: Álgebra BooleanaArquitetura de Computadores: Álgebra Booleana
Arquitetura de Computadores: Álgebra Booleana
 
Descrição formal de Casos de Uso
Descrição formal de Casos de UsoDescrição formal de Casos de Uso
Descrição formal de Casos de Uso
 
57701066 matematica-discreta-exercicios-resolvidos
57701066 matematica-discreta-exercicios-resolvidos57701066 matematica-discreta-exercicios-resolvidos
57701066 matematica-discreta-exercicios-resolvidos
 
Aula 4 modelo relacional
Aula 4   modelo relacionalAula 4   modelo relacional
Aula 4 modelo relacional
 
Razao e proporção
Razao e proporçãoRazao e proporção
Razao e proporção
 
Aulas 10 e 11 - Álgebra de Boole
Aulas 10 e 11 - Álgebra de BooleAulas 10 e 11 - Álgebra de Boole
Aulas 10 e 11 - Álgebra de Boole
 
Árvores balanceadas - AVL
Árvores balanceadas - AVLÁrvores balanceadas - AVL
Árvores balanceadas - AVL
 
1.Introdução Banco de Dados
1.Introdução Banco de Dados1.Introdução Banco de Dados
1.Introdução Banco de Dados
 
Teoria dos conjuntos.ppt
Teoria dos conjuntos.pptTeoria dos conjuntos.ppt
Teoria dos conjuntos.ppt
 
Função de 1º Grau
Função de 1º GrauFunção de 1º Grau
Função de 1º Grau
 
TEORIA DE CONJUNTOS
TEORIA DE CONJUNTOS TEORIA DE CONJUNTOS
TEORIA DE CONJUNTOS
 
Potenciação e Radiciação
Potenciação e RadiciaçãoPotenciação e Radiciação
Potenciação e Radiciação
 
Sistemas lineares
Sistemas linearesSistemas lineares
Sistemas lineares
 

Similaire à Linguagem Prolog - Antonio Rufino

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
Ricardo Bolanho
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
apolllorj
 
Palestra python
Palestra pythonPalestra python
Palestra python
Rony Cruch
 
Capitulo 1scilab
Capitulo 1scilabCapitulo 1scilab
Capitulo 1scilab
wjunior
 

Similaire à Linguagem Prolog - Antonio Rufino (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
 

Linguagem Prolog - Antonio Rufino

  • 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