SlideShare una empresa de Scribd logo
1 de 27
Descargar para leer sin conexión
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

Más contenido relacionado

La actualidad más candente

Árvores: Conceitos e binárias
Árvores:  Conceitos e bináriasÁrvores:  Conceitos e binárias
Árvores: Conceitos e binárias
Sérgio Souza Costa
 
Aula 8 inducao matematica
Aula 8   inducao matematicaAula 8   inducao matematica
Aula 8 inducao matematica
wab030
 
Aula de distribuição de probabilidade[1] cópia
Aula de distribuição de probabilidade[1]   cópiaAula de distribuição de probabilidade[1]   cópia
Aula de distribuição de probabilidade[1] cópia
Tuane Paixão
 
Logica Algoritmo 01 Introducao A Logica
Logica Algoritmo 01 Introducao A LogicaLogica Algoritmo 01 Introducao A Logica
Logica Algoritmo 01 Introducao A Logica
Regis Magalhães
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas Interfaces
Regis Magalhães
 

La actualidad más candente (20)

Plano cartesiano animado
Plano cartesiano animadoPlano cartesiano animado
Plano cartesiano animado
 
R para Iniciantes
R para IniciantesR para Iniciantes
R para Iniciantes
 
Função exponencial
Função exponencialFunção exponencial
Função exponencial
 
Árvores: Conceitos e binárias
Árvores:  Conceitos e bináriasÁrvores:  Conceitos e binárias
Árvores: Conceitos e binárias
 
Logaritmos
LogaritmosLogaritmos
Logaritmos
 
Introdução a python
Introdução a pythonIntrodução a python
Introdução a python
 
Aula 8 inducao matematica
Aula 8   inducao matematicaAula 8   inducao matematica
Aula 8 inducao matematica
 
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-FordCaminho Mínimo em Grafos - Algoritmo de Bellman-Ford
Caminho Mínimo em Grafos - Algoritmo de Bellman-Ford
 
Aula de distribuição de probabilidade[1] cópia
Aula de distribuição de probabilidade[1]   cópiaAula de distribuição de probabilidade[1]   cópia
Aula de distribuição de probabilidade[1] cópia
 
Banco de dados exercícios resolvidos
Banco de dados exercícios resolvidosBanco de dados exercícios resolvidos
Banco de dados exercícios resolvidos
 
Aula 22 probabilidade - parte 1
Aula 22   probabilidade - parte 1Aula 22   probabilidade - parte 1
Aula 22 probabilidade - parte 1
 
Aula 14 números irracionais
Aula 14   números irracionaisAula 14   números irracionais
Aula 14 números irracionais
 
Aula Sobre BinôMio De Newton
Aula Sobre BinôMio De NewtonAula Sobre BinôMio De Newton
Aula Sobre BinôMio De Newton
 
Expressões Numéricas
Expressões Numéricas Expressões Numéricas
Expressões Numéricas
 
Introdução a Algoritmos: Conceitos Básicos
Introdução a Algoritmos: Conceitos BásicosIntrodução a Algoritmos: Conceitos Básicos
Introdução a Algoritmos: Conceitos Básicos
 
Conjuntos numericos
Conjuntos numericosConjuntos numericos
Conjuntos numericos
 
Noções de probabilidade
Noções de probabilidadeNoções de probabilidade
Noções de probabilidade
 
Logica Algoritmo 01 Introducao A Logica
Logica Algoritmo 01 Introducao A LogicaLogica Algoritmo 01 Introducao A Logica
Logica Algoritmo 01 Introducao A Logica
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas Interfaces
 
Exercícios Resolvidos: Teorema de Rolle
Exercícios Resolvidos: Teorema de RolleExercícios Resolvidos: Teorema de Rolle
Exercícios Resolvidos: Teorema de Rolle
 

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

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