Aula 11

Livro texto pagina 1 (Introduction) e 2 (rules)

Prolog interativo

Prolog

história

Conceitos básicos

banco de dados/fatos/conhecimento

knowledge base

human(david).
human(john).
human(suzie).
human(eliza).
man(david).
man(john).
woman(suzie).
woman(eliza).
parent(david, john).
parent(john, eliza).
parent(suzie, eliza).

david e john são um novo tipo de dado: símbolo ou átomos. Não são strings, são nomes, como nomes de variavies e funções em outras linguagens

Símbolos sao sequencias de letras e números começando com uma letra minúscula. Por incluir o underscore _ no meio. Ou são escritos como qualquer sequencia de caracteres entre aspas simples '4ever' ou 'abd cde?'

human e man são também símbolos. Mas nesse contexto são chamados de predicados

david e john são termos

human(david). é um fato

Fatos sao um predicado com 0, 1 ou mais termos, terminado por um .

query

?- human(eliza)

isto é uma pergunta.

a resposta é

Yes

ou

true
?- human(tereza)

a resposta é

No 

ou 

false

Outra pergunta:

?- human(X).

X é uma variável pois começa com uma maiúscula.

Variáveis começam com uma letra maiúscula ou com o underscore _

a resposta é:

X = david

outra resposta - backtracking

no modo interativo do prolog, apertando o ; ou no site de prolog interativo apertando o next

X = john

de novo:

X = suzie

e de novo

X = eliza

No site do prolog, neste caso o next deixa de aparecer com disponível. Num prolog interativo, apertando o ; de novo da a resposta

No

Como funciona o Prolog

No

ou

false

com variavel e com backtracking

X = david

Se a gente força o backtracking (; ou next) o prolog

Regras https://en.wikibooks.org/wiki/Prolog/Rules

father(X,Y) :- parent(X,Y), man(X).
mother(X,Y) :- parent(X,Y), woman(X).

O query ?- father(X,eliza). imprime

X = john     ;

No

onde o ; indica que forçamos o backtrack

O query ?- father(A, C). imprime

 A = david
 B = john    ;
 
 A = david
 B = eliza   ; 
 
 No

Como regras funcionam

X = john

o and

a(..) , b(..) , c(..) ,d(..) .

tentara satisfazer a(..), depois b(..), depois c(..), e finalmente d(..).

Vamos incluir a regra:

mother(X,Y) :- parent(X,Y), woman(X).

e o query ?- mother(Z,eliza).

Exercício

Suponha um banco de dados com fatos pai e mae.

pai(antonio, beatriz).
pai(cassio, durval).
...
mae(tereza, beatriz).
mae(valera, durval).