Title: Prolog
1PrologUma Apresentação
- Claudio Cesar de Sá, DCC-UDESC
- claudio_at_joinville.udesc.br
- 2004-1
2O 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.
4Programaçã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.
6Um 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
9Interpretador 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.
10Verificaçã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
11Prolog 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.
-
12Forç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.
13Backtracking 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).
14Sintaxe 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
15Sintaxe 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
16Predicados 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
17Semâ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
18Base 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
20Modelagem 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.
22Redes 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
23Redes Semânticas (2)
- relação n1
- pedro
- maria pizza
- paulo
- relação transitiva
-
- pedro maria paulo
- relação é-um
24Redes Semânticas (3)
- 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?
25Clá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.
27Clá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
28Componentes 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).
30Arquivos 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
32Consultas 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).
34Programas 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
36Resoluçã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
37Mecanismo 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.
39Mecanismo 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
40Exemplo 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
41Consultas 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.
43Aula 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(....).
44Recursividade
45PROLOG parte 2
- Estruturas de Listas
- Alteração na base de dados
- Gramáticas DCG
46Estruturas 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.
48Um 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).
49Listas 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 ).
51Operaçõ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).
52Listas 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
53Base 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
55Predicados 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
57Gramá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
58Revisando ... Conceitos já vistos
59Linguagem 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
60Linguagem Prolog
61Tipos 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
62Tipos 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
63Tipos 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.
64Tipos de Dados
- Uma estrutura pode ser vista como uma árvore
n-ária onde a raiz da árvore é o nome da
estrutura.
65Tipos 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 .
66Listas
- Ex de lista
- joao, lisa, casados(paulo, joana), 9.47
- Representação
67Listas
- 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).
68Listas 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.
69Listas, 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
70Casamentos
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
71Listas
Ex. de lista não-tipada joao, lisa,
casados(paulo, joana), 9.47 Representação
gráfica
72Listas, 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.
73Predicado 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 !
74Operaçõ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).
75Detalhando 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
76What 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
77Finalmente...