Inteligência Artificial:
A Linguagem Prolog
(parte 2)
Prof. Elaini Simoni Angelotti
[email protected]
A Linguagem Prolog
LÓGICA E PROLOG

Observe que a regra
presa(X) :- come(Y,X), animal(X)
Em lógica corresponde a:
xy(come(Y,X) ^ animal(X)) -> presa(X)
Aplicando as Leis de Equivalência temos:
~(come(X,Y) ^ animal(X)) v presa(X)
~come(X,Y) v ~animal(X) v presa(X)
2
A Linguagem Prolog
REGRA DE INFERÊNCIA: RESOLUÇÃO

Outro exemplo:

acrescentando à BC a regra: “x é caçado se é
presa”
caçado(X) :- presa(X).

a regra na forma simbólica é:
presa(X) -> caçado(X)

a cláusula correspondente é:
~(presa(X)) v caçado(X)
3
A Linguagem Prolog
EXEMPLO DE PROGRAMA E CONSULTAS
come (urso, peixe).
come (peixe,peixinho).
come (peixinho,alga).
come (quati,peixe).
come(urso,quati).
come (urso, raposa).
come(raposa,coelho).
come (coelho, mato).
come(urso,cavalo).
come(cavalo,mato).
come(gato-selvagem,cavalo).
animal(urso).
animal(peixe).
animal(peixinho).
animal(quati).
animal(raposa).
animal(coelho).
animal(cavalo).
animal(gato-selvagem).
planta(mato).
planta(alga).
presa(X) :- come(Y,X), Animal(X).
caçado(X) :- presa(X).
4
A Linguagem Prolog
EXEMPLO DE PROGRAMA E CONSULTAS

Consultas e respostas:
?- animal(coelho).
yes
?- come(gato_selvagem,mato).
no
?- come(X,peixe).
urso;
quati.
?- come(X,Y),planta(Y).
peixinho alga;
coelho mato;
cavalo mato.
5
A Linguagem Prolog
RETROCESSO (BACKTRACKING)



O PROLOG tenta responder a uma questão comparando a
questão com os fatos na BC.
O Prolog tenta encontrar os predicados que se unificam.
Se uma procura falha, o backtracking permite que se volte ao
último momento onde se instanciou uma variável, procurando se
existe outra possibilidade de instanciação.
Exemplo:
gosta(maria, comida).
gosta(maria, vinho).
gosta(joão, vinho).
gosta(joão, maria).
?- gosta(maria, X), gosta(joão, X).
6
A Linguagem Prolog
RETROCESSO (BACKTRACKING)
1º sub_objetivo
2º sub_objetivo
gosta(maria, X), gosta(joão, X).
gosta(maria, comida).
gosta(maria, vinho).
gosta(joão, vinho).
gosta(joão, maria).
X = comida
Será procurado: gosta(joão, comida).
 A procura falha!!
 O valor instanciado na variável X (neste caso, comida) é
esquecido e o Prolog procura um outro valor para a X.
7
A Linguagem Prolog
RETROCESSO (BACKTRACKING)
1º sub_objetivo
2º sub_objetivo
gosta(maria, X), gosta(joão, X).
gosta(maria, comida).
gosta(maria, vinho).
gosta(joão, vinho).
gosta(joão, maria).
X = vinho
8
A Linguagem Prolog
RECURSÃO


As regras em Prolog são implicações lógicas

Podem depender de fatos:
presa(X) :- come(X,Y),animal(X)

Podem depender de outras regras:
caçado(X) :- presa(X)

Podem depender da própria regra: com definição
recursiva
Uma das principais características herdadas da
lógica pela linguagem Prolog é o uso da
RECURSÃO.
9
A Linguagem Prolog
RECURSÃO

Exemplo: usar a BC ecológica para definir a relação
na_cadeia_alimentar(X,Y)
com o significado:
”Y está na cadeia alimentar de X”
que por sua vez pode significar duas coisas:
1. X come Y diretamente.
2. X come algum animal que come algum
animal que come algum animal ... que come
Y.
10
A Linguagem Prolog
RECURSÃO

O caso 2. pode ser reescrito como:
2’. “X come Z e Y está na cadeia alimentar de Z”

O caso 1. é o ponto de parada da regra
recursiva.

A regra incorpora os casos 1 e 2’:
na_cadeia_alimentar(X,Y) :- come(X,Y).
na_cadeia_alimentar(X,Y) :- come(X,Z), na_cadeia_alimentar(Z,Y).
11
A Linguagem Prolog
RECURSÃO
?- na_cadeia_alimentar(urso,Y).
resposta:
1.
peixe
2.
quati
3.
raposa
4.
cavalo
5.
peixinho
6.
alga
7.
peixe
8.
peixinho
9.
alga
10. coelho
11. mato
12. mato
12
A Linguagem Prolog
RECURSÃO
antepassado(X,Z):-progenitor(X,Z).
antepassado(X,Z):-progenitor(X,Y),
antepassado(Y,Z).
13
A Linguagem Prolog
LISTAS

São estruturas simples de dados, largamente
empregadas em computação não-numérica.
Uma lista é uma seqüência de qualquer
número de intens. Ex:
[brasil, paraguai, uruguai, argentina]

Para representar listas em Prolog, dois casos
devem ser considerados:


a lista vazia, representada por [ ].
A lista não-vazia. Ex: [maria, jorge, bete]
14
A Linguagem Prolog
LISTAS

A lista não-vazia possui dois componentes:
CABEÇA e CAUDA.
[brasil, paraguai, uruguai]
CABEÇA = brasil
CAUDA = [paraguai, uruguai]

A cabeça de uma lista pode ser separada de sua
cauda com o uso “ | “.

Usando-se a lista [Cabeça|Cauda] e unificando essa
lista com outra lista qualquer, a cabeça ficará com o
1º elemento da lista e a cauda ficará com o resto da
lista.
15
A Linguagem Prolog
LISTAS
Lista 1
Lista 2
Unificação
[a, b, c]
[X|Y]
[casa, pata]
[X|Y]
[a, b, c]
[X,Y]
X=a
Y = [b, c]
X = casa
Y = pata
Não unifica
[data(7,Z,W),hoje]
[X|Y]
[a, b, c, d]
[X,Y|Z]
[elaini]
[X|Y]
X=
Y=
X=
Y=
Z=
X=
Y=
data(7,Z,W)
hoje
a
b
[c, d]
elaini
[]
16
A Linguagem Prolog
EXERCÍCIO: UNIFIQUE AS LISTAS ABAIXO
LISTA 1
LISTA2
[[a,b]|Y]
[H|T]
[a,b]
[X,Y|Z]
[[a,b],[c,d]]
[X,Y]
[a]
[X|Y]
[[Ana,Y]|Z]
[[X,foi],[ao_cinema]]
[data(7,W,1993), hoje]
[data(7,X,Y),Z]
[a,b,c,d]
[X,Y,Z]
[X|[Y|Z]]
[a,b,c,d]
UNIFICAÇÃO
17
A Linguagem Prolog
EXEMPLO USANDO LISTA E RECURSÃO

Um programa em Prolog que retorna o
último elemento de uma lista:
ultimo([A],A).
ultimo([Z|B],A):- ultimo(B,A).
18
A Linguagem Prolog
DECLARAÇÃO IS




Para realizar cálculos aritméticos em Prolog,
usamos a declaração IS.
Essa declaração deve ser colocada entre dois
objetos: o 1º é uma variável e o segundo uma
expressão aritmética.
Exemplo: X is 2 + 5 * 9 / 4
A parte decimal do número é separada da parte
inteira por um ponto (.) e não por uma vírgula (,).
Ex: 13.23
19
Download

Inteligência Artificial: Linguagem Prolog