Prolog - PowerPoint PPT Presentation

1 / 77
About This Presentation
Title:

Prolog

Description:

Title: Intelig ncia Artificial: Prolog Author: Faculdade de Informatica Last modified by: Claudio Created Date: 3/19/2002 3:30:32 PM Document presentation format – PowerPoint PPT presentation

Number of Views:120
Avg rating:3.0/5.0
Slides: 78
Provided by: Faculd8
Category:

less

Transcript and Presenter's Notes

Title: Prolog


1
PrologUma Apresentação
  • Claudio Cesar de Sá, DCC-UDESC
  • claudio_at_joinville.udesc.br
  • 2004-1

2
O Modelo de Programação em Lógica
  • Modelo declarativo abandona totalmente o
    conceito de Von Neumann
  • Semântica declarativa o programador descreve o
    problema a ser resolvido e esta descrição é usada
    para encontrar uma ou mais soluções do problema
  • Uma estrutura de um programa pode servir para
    resolver diversos problemas diferentes. Ex. SEs
  • Sem instruções explícitas e seqüenciamento
  • Máquina que executa uma linguagem lógica é
    conhecida como máquina de inferência

3
  • Base Cálculo de predicados de primeira ordem
  • axiomas lógicos (proposições) que representam o
    conhecimento e regras de dedução (inferência) de
    novos conhecimentos
  • Exemplo Uma baleia é um mamífero. Um mamífero
    tem sangue quente. Então, uma baleia tem sangue
    quente.
  • Programa conjunto de cláusulas que representam
    fatos (conhecidos) e regras (de dedução) que
    formam a base para formular consultas
    (objetivos).
  • Exemplos de objetivos saber se uma baleia é um
    mamífero saber se uma baleia possui sangue
    quente.

4
Programação em Lógica e Prolog
  • Histórico
  • 1972 Kowalski - Lógica como formalismo
    executável
  • 1973 Colmerauer / GIA / Universidade de
    Marseille - primeiro interpretador PROLOG
  • 1979 Pereira e Warren / Universidade de
    Edinburgh primeiro compilador PROLOG (PROLOG)
  • Implementações em diferentes dialetos diferem na
    sintaxe e nas bibliotecas de cláusulas.
  • Padrão Edimburgo
  • Exemplos Amzi, SWI, Visual, Arity Prolog, Turbo
    Prolog, LPA Prolog, Stramberry,

5
  • Prolog is a declarative language
  • This means that given the necessary facts and
    rules, Prolog will use deductive reasoning to
    solve your programming problems. In a procedural
    language, the programmer must provide step by
    step instructions that tell the computer exactly
    how to solve a given problem
  • Prolog is intelligent
  • Prolog has a built-in inference engine performing
    a top-down, left to right search in fact and
    rules to find solutions.
  • Prolog programs origins from mathematical
    proof-theory
  • A Prolog program can be viewed as a specification
    of the problem.
  • Visual Prolog is efficient
  • with less programming lines create programs that
    are executed at speed comparable to C and Pascal.

6
Um comparativo
7
  • Programa Prolog coleção de cláusulas de Horn
  • Valores, variáveis e termos
  • Em resumo
  • The first, official version of Prolog was
    developed at the University of Marseilles, France
    by Alain Colmerauer in the early 1970s as a tool
    for PROgramming in LOGic.
  • Today, Prolog is an important tool in programming
    artificial intelligence applications and in the
    development of customized knowledge bases, expert
    systems, natural language interfaces, and smart
    information management systems
  • Visual Prolog addresses the same target market as
    SQL Database Systems, C development systems and
    other language tools like Visual Basic, Borland's
    Delphi, or IBM's Visual Age

8
  • PL x programação imperativa, funcional e 00
  • mais declarativa, mais alto-nível
  • mais versátil -- linguagem única para
  • especificar formalmente e implementar
  • programar aplicações, scripts e consultas em BD
  • PL x outros formalismos de RC
  • melhor fundamentação teórica
  • melhor integração com o resto da ciência
    computação
  • PL base interessante para integração de
    paradigmas
  • PL caso particular de programação por
    restrições

9
Interpretador Prolog controle e buscaregras de
funcionamento memorize !
  • Aplica regra de resolução
  • com estratégia linear (sempre tenta unificar
    ultimo fato a provar com a conclusão de uma
    cláusula do programa),
  • na ordem de escritura das cláusulas no programa,
  • com encadeamento de regras para trás,
  • busca em profundidade e
  • da esquerda para direita das premissas das
    cláusulas,
  • e com backtracking sistemático e linear quando a
    unificação falha,
  • e sem occur-check na unificação.
  • Estratégia eficiente mas incompleta.

10
Verificação de ocorrência
  • Ao contrario da unificação da resolução
  • unificação de Prolog é sem occur-check,
  • quando chamado com uma variável X e um literal l,
  • instância X com l, sem verificar antes se X
    ocorre em l.
  • Junto com a busca em profundidade
  • faz que Prolog pode entrar em loop com regras
    recursivas,
  • ex c(X) - c(p(X)). gera lista infinita de
    objetivos
  • c(p(U)), c(p(p(U))), c(p(p(p(U)))), ...
  • cabe ao programador de não escrever tais regras,
  • torna a unificação linear no lugar de quadrática
  • no tamanho dos termos a unificar

11
Prolog devolve a primeira resposta
  • g1(a).
  • g21(a).
  • g3(a).
  • g4(a).
  • g1(b).
  • g21(b).
  • g22(b).
  • g3(b).
  • g(X) - g1(X), g2(X).
  • g1(X) - g3(X), g4(X).
  • g2(X) - g21(X), g22(X).
  • prolog
  • ?- consult(g.pl).
  • yes
  • ?- g(U).
  • U b
  • ?-
  • U a
  • ?-
  • no
  • ?- halt.

12
Forçar o backtracking para obter todas as
respostas
  • g1(a).
  • g21(a).
  • g3(a).
  • g4(a).
  • g1(b).
  • g21(b).
  • g22(b).
  • g3(b).
  • g(X) - g1(X), g2(X).
  • g(X) - g3(X), g4(X).
  • g2(X) - g21(X), g22(X).
  • g(U)? lt- U b.
  • g1(U)? -gt U a.
  • g2(a)? lt- no.
  • g21(a)? -gt yes.
  • g22(a)? -gt no.
  • g1(U), U \ a? -gt U b.
  • g2(b)? lt- yes.
  • g21(b)? -gt yes.
  • g22(b)? -gt yes.
  • g1(U), U \ a,b ? -gt no.

13
Backtracking em cascatas
  • g(U), g \ g1,g2? lt- U a.
  • g3(U)? -gt U a.
  • g4(a)? -gt yes.
  • g3(U), U \ a? -gt U b.
  • g4(b)? -gt no.
  • g3(U), U \ a,b? -gt no.
  • g(U), g \ g1,g2 g3,g4? -gt no.
  • g1(a).
  • g21(a).
  • g3(a).
  • g4(a).
  • g1(b).
  • g21(b).
  • g22(b).
  • g3(b).
  • g(X) - g1(X), g2(X).
  • g(X) - g3(X), g4(X).
  • g2(X) - g21(X), g22(X).

14
Sintaxe 1
  • fato -gt fa. (abrev. para Formula
    Atômica, fa)
  • regra -gt fa0 - fa1, ... , faN.
  • consulta -gt fa1, ... , faN.
  • fa -gt pred(termo1, ... , termoN) preop termo1
    termo2
  • termo1 inop termo2 termo1 termo2
    postop
  • termo -gt constante variável fa
  • constante -gt átomos numeros
  • pred -gt átomo
  • Ao invés de L1 nenhuma distinção entre
    predicados e funções

15
Sintaxe 2
  • variável ex G, Glr, geber-ramalho, 1geber, _glr,
    _
  • átomo ex g, glr, gt, geber_ramalho, geber1,
    geber ramalho
  • número ex 23
  • termos, fatos, regras e consultas sem variáveis
    instanciadas (ground)
  • termos, fatos e regras com variáveis universais
  • consultas com variáveis existenciais

16
Predicados built-in
  • operador de unificação e lista .
  • teste e conversão de tipos atom, integer, real,
    var, name, list, etc.
  • controle de busca !, fail, true, repeat
  • negação por falha not
  • op aritméticos is, , -, , /, mod, , gt, lt,
    etc.
  • entrada/saída read, write, nl, consult,
    reconsult, etc.
  • inspeção de código functor, arg, .., listing,
    clause
  • meta-programação assert, retract, call
  • manipulação de conjuntos bagof, setof

17
Semântica
  • Programa Prolog P possui 2 semânticas
  • semântica declarativa
  • semântica das formulas de L1 correspondendo as
    cláusulas de P
  • em geral
  • conjunto mínimo de termos instanciados
    verificando P
  • extensão de P como BDD
  • modelo de Herbrand
  • semântica procedimental
  • execução do algoritmo de resolução sobre P
  • Maioria dos predicados built-in
  • funcionam por efeitos colaterais
  • não possuem semântica declarativa em L1

18
Base do modelo lógica simbólica
  • Proposições consiste de objetos e relações entre
    objetos, que podem ou não ser verdadeiras
  • Uma relação é estabelecida entre objetos e
    resulta nos valores verdadeiro e falso. Exemplo
    a gt b é a relação R(a,b), sendo R a relação gt.
  • Programação em lógica consiste em implementar
    relações e formular consultas (objetivos) como
  • Dados a e b, determinar se R(a,b) é verdadeira.
  • Dado a, encontrar todo y tal que R(a,y) é
    verdadeira.
  • Dado b, encontrar todo x tal que R(x,b) é
    verdadeira.
  • Encontrar todo x e todo y tal que R(x,y) é
    verdadeira.

19
  • Linguagens de programação em lógica
  • coleção de cláusulas de Horn
  • resolução usando cálculo de predicados
  • Cláusulas de Horn
  • representação de proposições na forma de uma
    sentença se p então q. Representação q ? p
    ou p ? q

20
Modelagem de programas em lógica
  • Apenas o componente LÓGICA, sem o componente de
    CONTROLE, que descreve como o componente lógica
    deve ser usada
  • Não usa mapeamentos entre entrada/saída e sim
    relações
  • Especifica o conhecimento a ser usado na solução
    do problema
  • Conhecimento objetos, um entendimento, ...

21
  • Projeto de soluções abordagem de redes
    semânticas, para representar relacionamentos
  • relações unárias
  • relações binárias
  • relações transitivas, etc.

22
Redes Semânticas (1)
  • Usadas para representar relacionamentos
  • rede semântica simples 1 ? 1
  • porta dedo
  • criança chocolate
  • relação 1n
  • brincar
  • criança circo
  • bicicleta

amassou
adora comer
23
Redes Semânticas (2)
  • relação n1
  • pedro
  • maria pizza
  • paulo
  • relação transitiva
  • pedro maria paulo
  • relação é-um

24
Redes Semânticas (3)
  • relacionamento faz-parte
  • A abordagem de grupos
  • Fatos
  • F1 Pedro, Maria e Paulo gostam de ler
  • F2 Pedro, Paulo e Vera gostam de cinema
  • F3 Paulo, Maria e Vera gostam de boliche
  • Questões
  • X gosta de ler?
  • Quem gosta de boliche?
  • Quem gosta de boliche e cinema?

25
Cláusulas de Horn (1)
  • Cláusula incondicional (fato) proposição atômica
    que não contém condições. Representação q .
  • Exemplo 3 é um número natural natural(3) .
  • Prolog natural(3). Ou
  • natural(3) - true.
  • Cláusula positiva (regra) Contém uma ou mais
    conclusões. Representação q p.
  • Exemplo Todo número natural é um número
    inteiro. inteiro(N) natural(N).
  • Em Prolog, isto é escrito assim
  • inteiro(N) -
    natural(N).

26
  • Cláusula negativa (consulta) não contém
    conclusões. Representação p.
  • Exemplo Será 3 um número inteiro? inteiro(3).
  • Processo de dedução Se 3 é um número natural
    (fato) e todo número natural é um inteiro, então
    prova-se que 3 é um número inteiro.

27
Cláusulas de Horn (1)
  • Cláusula condicional (regra) contém uma ou mais
    condições, ligadas por conectores lógicos.
  • Representação q p1p2.
  • Exemplo Para que um número seja natural, ele
    deve ser inteiro e positivo.
  • natural(N) inteiro(N) ? Ngt0.
  • Prolog natural(N) - inteiro(N), Ngt0.

negação ? a conjunção a ? b disjunção a ?
b equivalência a ? b implicação a ? b
Conectores lógicos
28
Componentes Básicos do PROLOG
  • Átomos
  • Constantes números e strings.
  • Exemplos barbara Moby
  • Variáveis primeira letra maiúscula escopo de
    cláusula.
  • Exemplos X Sala
  • Termos funcionais atômicos funtor(argumentos).
  • Exemplos capital(X,Y) data(2000, jan, 1)

29
  • Composição de termos funcionais conetivos
    lógicos e (,) ou ()
  • Exemplo sangue_quente(X)- ave(X) mamífero(X).
  • Termos funcionais definidos pelo usuário ou
    provenientes de bibliotecas
  • Exemplo read(X).

30
Arquivos e Consultas
  • Cada arquivo pode conter fatos e regras
  • / Exemplos de fatos base de dados /
  • pato(Donald). / pato é um predicado (funtor)
    /
  • baleia(Moby). / Moby é um argumento /
  • / Exemplos de regras relações /
  • mamifero(X) - baleia(X). / toda baleia é um
    mamífero /
  • sangue_quente(X) - ave(X). / toda ave tem
    sangue quente /
  • sangue_quente(X) - mamifero(X).
  • / todo mamifero tem sangue quente /

31
/ Exemplos de consultas / ? pato(Donald). ?
sangue_quente(Moby).
Importante as cláusulas podem ter o mesmo
predicado (nome) e diferentes aridades (número de
argumentos). Isto é padrão do Prolog ... Não é
geral Para o Turbo-Prolog o pedaço abaixo não
funciona.. Exemplo nome(a1)- .... nome(a1,
a2) - .... Pois é um Prolog tipado gt Veloz
como C, Delphi
32
Consultas e Unificação
  • Cláusula objetivo consulta
  • Exemplo de consulta ?- sangue_quente(Moby).
  • A consulta é pesquisada na base de dados usando o
    mecanismo de UNIFICAÇÃO (da Lógica de Primeira
    Ordem). Dados dois termos, diz-se que eles
    unificam se
  • ambos são constantes e iguais
  • um dos termos é uma variável
  • ambos são cláusulas de mesmo predicado (mesmo
    nome, igual número de argumentos) e os argumentos
    unificam.

33
  • Resposta conseqüência lógica do programa
  • FATOS logicamente tem resposta como sim/não,
    yes/no, true/false
  • Exemplo ?- gosta(maria, vinho).
  • VARIÁVEIS uma ou mais respostas
  • Exemplo ?- gosta(maria, X).

34
Programas fatos e regras
  • Fatos agrupados se constituem na base de dados.
  • Fato 1 Brasília e Porto Alegre são cidades.
  • cidade(portoalegre). ou cidade(Porto
    Alegre).
  • cidade(brasilia).
  • Fato 2 Brasil é um país.
  • pais(brasil).
  • Fato 3 Brasília é a capital do Brasil.
  • capital(brasil, brasilia).
  • Fato 4 Rio Grande do Sul é um estado.
  • estado(rgs).
  • Fato 5 Porto Alegre é capital do Rio Grande do
    Sul
  • capital(rgs, portoalegre).

é-uma
portoalegre
cidade
é-um
brasil
pais
é capital
brasilia
brasil
35
  • Regras estabelecem relações mais complexas entre
    objetos.
  • capital_pais(X,Y) - pais(X), cidade(Y),
    capital(X, Y).
  • capital_estado(X,Y) - estado(X), cidade(Y),
    capital(X, Y).
  • Leitura Y é capital do pais X, se X é-um pais
    e Y é-uma cidade e Y é capital de X.
  • Estas relações complexas em qualquer ordem,
    sequência ou hierarquia

36
Resolução exemplo
OBJETIVO Seja a consulta ? capital_pais (brasil,
Nome). Resposta esperada Nomebrasilia
Busca UNIFICAÇÃO do objetivo e todos
os subobjetivos
capital_pais(X,Y)
sub-objetivos
pais(X),
cidade(Y),
capital(X, Y).
cidade(portoalegre). cidade(brasilia).
pais(brasil). capital(brasil,
brasilia). estado(rgs). capital(rgs,
portoalegre). capital_pais(X,Y) - pais(X),
cidade(Y), capital(X, Y). capital_estado(X,Y) -
estado(X), cidade(Y), capital(X, Y).
pais(brasil).
cidade(brasilia).
capital(brasil, brasilia).
A busca prossegue até esgotar todas as
possibilidades de unificação
37
Mecanismo de interrupção cláusula CUT!
  • Cut é uma estrutura de controle do Prolog e é
    identificada por ! .
  • Ele é útil para controlar e limitar as
    buscas.Quando o cut é encontrado, o objetivo é
    imediatamente considerado satisfeito.

38
  • Nenhuma cláusula alternativa para aquele
    predicado é considerada. Portanto, o cut elimina
    a capacidade de retroceder.

39
Mecanismo de interrupção !
  • Exemplo
  • Begin - A , B , C.
  • B - D, E, ! , F.
  • Neste exemplo, A,B,C,D,E e F são variáveis que
    representam objetivos em predicados. As variáveis
    D, E e F são sub-objetivos de B.
  • Se o objetivo A é satisfeito, então Prolog tenta
    satisfazer o objetivo B, que consiste em
    satisfazer todos os sub-objetivos D, E e F.
  • Quando o programa encontra E e então o cut, o
    programa completa F e então vai para o objetivo
    C.
  • Se C falha, o programa retrocede através do
    objetivo B tentando refazer F. Se F falha, então
    B falha porque ele contém o cut.
  • Ele então retrocede ao objetivo A.

A
D
Begin
B
E
C
F
40
Exemplo de cut!
/ Base de Dados / gosta(pedro,
leitura). gosta(maria, leitura). gosta(paulo,
leitura). gosta(pedro, cinema). gosta(paulo,
cinema). gosta(vera, cinema). gosta(paulo,
boliche). gosta(maria, boliche). gosta(vera,
boliche).
/ Consultas / ?- gosta(paulo, leitura). yes ?-
gosta(Quem, boliche). Quem paulo ? Quem
maria ? Quem vera
Existe outra resposta?
V e V?
?- gosta(Quem, boliche), gosta(Quem,
cinema). Quem paulo ? Quem vera
41
Consultas reversibilidade
  • Permite a definição de programas sem distinção
    de e/s
  • Permite a obtenção de respostas alternativas
  • Programas com mais de uma finalidade
  • Exemplo gosta(maria, peixe).
  • gosta(maria, vinho).
  • gosta(pedro, vinho).
  • gosta(pedro, maria).
  • Perguntas
  • - Quem gosta de peixe?
  • ?- gosta(X, peixe).
  • - Quem gosta de vinho?
  • ?- gosta(X, vinho).
  • - Pedro e Maria se gostam?
  • ?- gosta(pedro, maria), gosta(maria, pedro).
  • - Existe algo que Pedro e Maria (ambos) gostem?
  • ?- gosta(pedro, X), gosta(maria, X).

42
Dados a e b, determinar se R(a,b) é verdadeira.
Dado a, encontrar todo y tal que R(a,y) é
verdadeira. Dado b, encontrar todo x tal que
R(x,b) é verdadeira. Encontrar todo x e todo y
tal que R(x,y) é verdadeira.
43
Aula Prática Prolog
  • Ativar ambiente Prolog (SWI-Prolog)
  • Um editor externo de programa
  • Carregar o programa digitado
  • Testar o que fez.
  • Dúvidas help(...).
  • Ou apropos(....).

44
Recursividade
45
PROLOG parte 2
  • Estruturas de Listas
  • Alteração na base de dados
  • Gramáticas DCG

46
Estruturas em Prolog
  • Valores números, átomos, estruturas
  • Átomos termos primitivos usados em cláusulas
  • Exemplo cor(azul). num(12). nomes(joão). ...

47
  • Tuplas (elementos não homogêneos) cláusulas
  • Exemplos
  • nome(Ana Paula, Arosio).
  • data(01, jan, 2000).
  • pessoa(nome(Ana Paula, Arosio), 22, atriz).
  • Listas (elementos homogêneos) caso particular de
    tuplas
  • Strings lista de inteiros
  • Importante Prolog é uma linguagem não tipada.
    Exceto o Visual Prolog. Mas, tem uma performance
    equivalente ao C.

48
Um pouco de aritmética
  • Operadores , -, , /, //, , mod, ...
  • Associação de valores Quad is XX
  • O predicado is é muito útil em programas que
    lidam com computações numéricas, mas esta
    conveniência tem seu preço a propriedade de
    reversibilidade (XX is Quad) deixa de existir.
  • Relações gt, lt, gt, lt, , / , \
  • Recursividade

fatorial (0, 1). fatorial (N, X) - N1 is (N 1),
fatorial (N1, X1), X is (N X1).
49
Listas representação
  • Lista vazia (átomo)
  • Lista simples canario, bentevi, periquito
  • ou
  • canario, bentevi, periquito
  • Outra notação X Y lista com header X e
    tail Y
  • X canario Ybentevi,periquito

50
  • Lista de lista azul,preto,branco ,
    vermelho,branco
  • Lista de cláusulas gosta( ana, pedro), gosta
    (pedro, ana)
  • Cláusulas de listas
  • lista1( 10,20,30 ). lista2 ( o, gato,
    bebeu, o, leite ).

51
Operações clássicas sobre listas
  • Determinar se um elemento pertence a uma lista
  • member(Elem,Elem_).
  • member(Elem,_Tail)- member(Elem,Tail).
  • Adicionar duas listas, gerando outra lista
  • append(,L,L).
  • append(HT,L,HU)- append(T,L,U).

Uso de recursão
  • Último elemento de uma lista
  • last(X,X).
  • last(X,_Y)- last(X,Y).

52
Listas na solução de problemas
  • Lembrando que o mecanismo básico de execução é a
    unificação, pode-se associar uma lista a uma
    variável.
  • Exemplo regra para inferir se uma determinada
    cor pertence a uma lista de cores

Seja a cláusula cores(azul,preto,branco,amarelo
). Consulta ? cores(L). Resposta L azul,
preto, branco, amarelo.
L lista
Regra consulta_cor(C)-cores(L),
member(C,L). Consulta ? consulta_cor(branco). Res
posta yes.
verifica se C pertence à lista L
53
Base de dados operações
  • Base de dados incluir, excluir, alterar fatos e
    regras
  • consult adiciona o conteúdo do arquivo à base
    de dados
  • reconsult adiciona / substitui claúsulas
  • asserta( ) e assertz( ) adicionam uma cláusula.
  • Exemplo asserta ( gosta( maria, teatro) ).

54
  • retract( ) remove uma claúsula.
  • Exemplo retract (gosta (maria, boliche)).
  • abolish(p,n) remove todos os predicados p de
    aridade n

55
Predicados de entrada/saída
  • Biblioteca de predicados depende de
    implementação
  • Alguns exemplos em Arity Prolog
  • get(Char) Lê um caracter, sendo que o código
    ASCII do caracter tem que ser maior que 32
  • put(X) Escreve o inteiro X como um caracter. X
    é o código ASCII do caracter.
  • read(Termo) Lê um termo. Ele reconhece como fim
    do termo um ponto.
  • write(Termo) Escreve um termo no dispositivo de
    saída.

56
  • Bibliotecas mais sofisticadas
  • interfaces gráficas com o usuário (XPCE)
  • interfaces com bancos de dados

57
Gramáticas DCG - Definite Clause Grammar
Objetivo Elaborar reconhecedores de gramática
para linguagens naturais, compiladores, etc.
Exemplo de uma frase frase sujeito predica
do verbo objeto
artigo nome

/ ----Gramatica-----/ frase--gtsujeito,predicado
. sujeito--gteu. predicado--gtverbo,objeto. objeto
--gtartigo,nome. verbo--gtquero. artigo--gto. art
igo--gta. artigo--gt. nome--gtestudar. nome--gt
conta. nome--gtcardapio.
eu quero o cardapio
58
Revisando ... Conceitos já vistos
59
Linguagem Prolog
  • Fatos x Regras
  • Uma clausula em Prolog está dividida em cabeça e
    corpo
  • a(X,Y) - b(X), c(X,Y)
  • cabeça corpo
  • Uma regra é verdadeira se os predicados do corpo
    forem verdadeiros
  • Uma fato, é uma regra sem corpo, e portanto
    sempre verdadeiro

60
Linguagem Prolog
  • Tipos de dados

61
Tipos de dados
  • Simples
  • Átomo
  • Qualquer cadeia de letras, dígitos e sublinha _
    que comece por letra minúscula
  • Qualquer cadeia de caracteres entre apóstrofes
  • Ex aBC, texto, variavel_livre, Jose Carlos
  • Números
  • Inteiros -3, 569
  • Reais -3.47, 623.0

62
Tipos de Dados
  • Variáveis
  • Qualquer cadeia de letras, dígitos e sublinha _
    que comece por letra maiúscula ou sublinha
  • Ex X, Nome, _
  • Variáveis no Prolog não tem tipo até que seja
    feita uma atribuição (instanciamento), neste caso
    a variável assume o tipo do dado atribuído.
  • O escopo das variáveis é a clausula, e neste
    escopo só uma atribuição pode ser feita à
    variável a não ser que a atribuição seja desfeita
    através de backtracking

63
Tipos de Dados
  • Estruturados
  • Estruturas
  • Objetos que contem vários componentes. Os
    componentes podem por sua vez ser estruturas ou
    dados simples.
  • Ex data(05,04,2002), (X, (1, 1))
  • Uma estrutura é definida pelo seu nome (funtor) e
    pelo número de argumentos (aridade).
  • Ex data(13,4) e data(13,4,02) são estruturas
    diferentes.

64
Tipos de Dados
  • Uma estrutura pode ser vista como uma árvore
    n-ária onde a raiz da árvore é o nome da
    estrutura.

65
Tipos de Dados
  • Lista
  • Uma lista é uma seqüência de itens. Os itens
    podem ser de qualquer tipo, inclusive outras
    listas.
  • Uma lista pode ser vista como uma árvore binária
    onde a raiz da árvore é o operador de lista .,
    o nodo esquerdo é a cabeça (primeiro elemento) da
    lista e o nodo direito é o resto da lista.
  • O ultimo elemento de uma lista é sempre a lista
    vazia, representada por .

66
Listas
  • Ex de lista
  • joao, lisa, casados(paulo, joana), 9.47
  • Representação

67
Listas
  • Trabalhando com listas
  • Ex predicado membro(X,L)
  • Testa se um item pertence a uma lista dada
  • X item desejado (entrada)
  • L Lista (entrada)
  • se a lista chegou ao fim então o item não
    pertence a
  • lista.
  • membro(_, ) - fail.
  • se o item é igual ao primeiro elemento da
    lista então
  • ele pertence a lista
  • membro(X, XR).
  • se o item não é igual ao primeiro elemento da
    lista
  • então testa se ele pertence ao resto da lista
  • membro(X,PR) - membro(X,R).

68
Listas um tipo especial de estrutura de dados
....
  • Uma lista é uma seqüência de itens. Os itens
    podem ser de qualquer tipo, inclusive outras
    listas
  • Contudo, listas tipadas são as de interesse,
    ou seja, onde todos elementos tem o mesmo tipo.
    Ex telefones, registros, ..., de um grupo de
    pessoas
  • Uma lista pode ser vista como uma árvore
    binária onde a raiz da árvore é o operador de
    lista (pipe), o nó esquerdo é a cabeça
    (primeiro elemento) da lista e o nó direito é o
    resto da lista.
  • O último elemento de uma lista é sempre a lista
    vazia, representada por . Logo, sua definição é
    recursiva. Ver apostila.

69
Listas, apresentando-as
  • Enumeradas
  • a, b, c
  • 7, a, y, 9
  • Listas com cabeças e caudas
  • a, b, c
  • a, b c
  • a b, c

70
Casamentos
Variáveis e seus casamentos nas listas ?- H
T a, b, c H a T b, c ?- a T H,
b, c T b , c H a ?- a , b H1
, H2 , X H1 a H2 b X
71
Listas
Ex. de lista não-tipada joao, lisa,
casados(paulo, joana), 9.47 Representação
gráfica
72
Listas, um exemplo ...
Trabalhando com listas Ex predicado
membro(X,L) Testa se um item pertence a uma lista
dada X item desejado (entrada) L Lista
(entrada) se a lista chegou ao fim então o
item não pertence a lista. membro(_, ) -
fail.
73
Predicado membro, continuação
se o item é igual ao primeiro elemento da lista
então ele pertence a lista, logo membro(X,
XR). se o item não é igual ao primeiro
elemento da lista então testa se ele pertence ao
resto da lista, logo membro(X,PR) -
membro(X,R). Finalmente membro(X,
X_). membro(X,_R) - membro(X,R). É o
suficiente para o yes ou no !
74
Operações clássicas
  • Determinar se um elemento pertence a uma lista
  • member(Elem,Elem_).
  • member(Elem,_Tail)- member(Elem,Tail).
  • Concatenar duas listas, gerando outra lista
  • append(,L,L).
  • append(HT,L,HU)- append(T,L,U).

Uso de recursão
  • Último elemento de uma lista
  • last(X,X).
  • last(X,_Y)- last(X,Y).

75
Detalhando o append...
Perguntas do tipo ?- append(a, b, c, d, e,
f, X). ?- append(a, b, c, X, a, b, c, d, e,
f). ?- append(X, Y, a, b, c, d, e, f). As
combinações possíveis X Y a, b, c,
d, e, f X a Y b, c, d, e, f X a,
b Y c, d, e, f . .
. . X a, b, c, d, e, f Y
76
What is the length of a list ?
  • THINKThe length of a list, x Tail , is 1
    the length of Tail
  • What is the boundary condition?
  • The list is the boundary.
  • The length of is 0.

mylength( , 0) . mylength( X Y , N )
mylength(Y, Nx), N is (Nx 1). ?
mylength( 1, 7, 9, X ). X 3
77
Finalmente...
  • Tem que exercitar...
Write a Comment
User Comments (0)
About PowerShow.com