Sunteți pe pagina 1din 14

Prolog

1. Sintaxa
2. Raţionamente în Prolog explicaţii simplificate
- Raţionamente deductive prin potrivire (unificare)
- once, !
3. Folosirea operatorilor
4. Folosirea listelor
5. Reguli recurente
Raţionament în Prolog - sau găsirea răspunsului la
întrebări - explicaţii simplificate

o Prolog caută în ce condiții (valori ale variabilelor) predicatele din


întrebare sunt adevărate (îndeplinite)
= demonstraţie/ execuţie scop

Dacă întrebarea are mai multe predicate, fiecare predicat din


întrebare este un subscop.
Toate predicatele din întrebare conectate prin SI trebuie
îndeplinite pentru aceleaşi valori ale variabilelor.
? - parent(X, greta), parent(X, fred) – aceeași valoare a lui X

Fiecare întrebare este rezolvată separat, nu se reţin valori ale


variabilelor obţinute la întrebări anterioare.
Raţionament în Prolog - sau găsirea răspunsului la
întrebări - explicaţii simplificate

Se caută potriviri:
ana cu ana
Doi termeni se potrivesc dacă parent cu parent
o sunt identici sau
ana cu fred

o pot deveni identici pentru anumite valori ale unor variabile: parent(X,ana) cu
parent(fred,ana)
 potrivirile la predicate încep de la nume şi aritate.
 o variabila se poate potrivi cu o constanta sau altă variabilă X cu fred

 o variabila se poate potrivi cu un predicat care nu depinde de ea X cu parent(Z,ana)

parent(X,ana) cu
parent(X,fred)
Raţionament în Prolog - sau găsirea răspunsului la
întrebări - explicaţii simplificate

Potrivirile sunt căutate de sus in jos, de la stânga la dreapta.

Se afişează prima potrivire găsită.

Se revine (backtracking) în punctul precedentei potriviri, etc.

Exemplu
oras(ro, iasi). 1: nu
oras(uk, londra). 2: nu Răspuns:
oras(fr, paris). 3: da MORE X= paris more
oras(fr, lyon). 4: da MORE X= lyon

oras(ro, cluj). 5: nu

întrebare ?- oras(fr,X).
Raţionament în Prolog - sau găsirea răspunsului la
întrebări - explicaţii simplificate
oras(ro, cluj). %L1
oras(ro, iasi). %L2
oras(uk, londra). %L3 1. Potrivire cu L9: X←Y, Y←ana:
oras(fr, paris). %L4 (locuitorOras(Z,ana), oras(Y,Z))
oras(fr, lyon). %L5
fapte şi locuitorOras(iasi, ana). %L6 2. Rezolv primul subscop
reguli locuitorOras(iasi, mihai). %L7 locuitorOras(Z,ana)
locuitorOras(cluj, marius). %L8
locuitorTara(X,Y):- %L9
locuitorOras(Z,Y),%L10
2.1 Potrivire cu L6 Z=iasi,
oras(X,Z). %L11 Continui cu rezolvarea celui de-
al doilea subscop: oras(Y,iasi)
?- locuitorTara(Y,ana). Potrivire cu L1 – nu, L2-
întrebare da (Y=ro), L3-L5 nu
Revin cu backtracking
2.2 Potrivire cu L7 – nu
Y 2.3 Potrivire cu L8 – nu
=
r
STOP
o
Raţionament în Prolog - sau găsirea răspunsului la
întrebări - explicaţii simplificate
Raţionament în Prolog - sau găsirea răspunsului la
întrebări - explicaţii simplificate

Exerciții
Problemele Medicamente, Călătorii, Mașini
Raţionament în Prolog - explicaţii simplificate

Exemple pentru căutarea potrivirilor

p(X, 2, 2) = p(1,Y,X)
?- p(X, 2, 2) = p(1, Y, X).
No (0.00s cpu)

p(_, 2, 2) = p(1, Y, _)
?- p(_65, 2, 2) = p(1, Y, _85).
Y = 2
Yes (0.00s cpu)
Raţionament în Prolog- explicaţii simplificate

Exemple pentru căutarea potrivirilor

f(a,g(X,Y))=f(X,Z), Z=g(W,h(X))
?- f(a, g(X, Y)) = f(X, Z), Z = g(W, h(X)).
X = a
Y = h(a)
Z = g(a, h(a))
W = a
Yes (0.00s cpu)
Raţionament în Prolog - explicaţii simplificate

Exerciţii
[Ulle Endriss, Lecture Notes An Introduction to Prolog Programming, Institute
for Logic, Language and Computation, Univ. Amsterdam, 2016]

?- f(a, b) = f(X, Y).

?- friend(mary, john) = friend(John, Mary).

a(B, B).
?- a(1, X), a(X, Y), a(Y, Z), a(Z, 100).

?- myFunctor(1, 2) = X, X = myFunctor(Y, Y).

?- f(a, _, c, d) = f(a, X, Y, _).

?- write('One '), X = write('Two ').


Raţionament în Prolog - explicaţii simplificate
Folosirea !
Este un scop îndeplinit implicit, care blochează continuarea găsirii
potrivirilor in regula cu backtracking
?- voluntariacceptati(X,iasi):-
student(mike). student(mike). student(ann). student(ann).
student(ann). student(ann). student(mike). student(mike).
integralist(ann). integralist(ann). integralist(ann). integralist(ann).
integralist(mike). integralist(mike). integralist(mike). integralist(mike).
locuitor(iasi,ann). locuitor(iasi,ann). locuitor(iasi,ann). locuitor(iasi,ann).
locuitor(pascani,mike). locuitor(pascani,mike). locuitor(pascani,mike). locuitor(iasi,mike).
voluntariacceptati(X,Y):- voluntariacceptati(X,Y):- voluntariacceptati(X,Y):- voluntariacceptati(X,Y):-
student(X), student(X), student(X), student(X),
integralist(X), integralist(X), integralist(X), integralist(X),
locuitor(Y,X) !, !, !,
locuitor(Y,X) locuitor(Y,X) locuitor(Y,X)
X=ann No locuitor(iasi,mike) X=ann X=ann
neindeplinit, revenire
înainte de ! nepermisa
Raţionament în Prolog - explicaţii simplificate
Folosirea once/1

once(Goal) – alege prima variantă de răspuns

student(mike). ?verifOnce(X,Y):- student(mike). ?verifOnce(X,iasi):-


student(ann). X=mike, Y=pascani student(ann). No
integralist(ann). integralist(ann).
integralist(mike). ? integralist(mike). ?
locuitor(iasi,ann). voluntariacceptati(X,Y) locuitor(iasi,ann). voluntariacceptati(X,iasi)
locuitor(pascani,mike). X=mike, Y=pascani locuitor(pascani,mike). No
voluntariacceptati(X,Y):- X=ann, Y=iasi. voluntariacceptati(X,Y):-
student(X), student(X),
integralist(X), integralist(X),
locuitor(Y,X). !,
verifOnce(X,Y):- locuitor(Y,X).
once(voluntariacceptati(X,Y)). verifOnce(X,Y):-
once(voluntariacceptati(X,Y)).
Raţionament în Prolog - explicaţii simplificate

Exerciții
Grad interacțiune

Indicam unde locuiesc studenții – campus (si ce camin), oras (cartier)

Indicam la facultate, în ce an si grupa sunt înscriși

Indicăm gradul de interacțiune intre studentul X si Y (ca bază pentru analiza


riscului epidemiologic)

Exemplificare raționament când se folosește ! și once


Raţionamente în Prolog - explicaţii simplificate
Repetă
Reguli de potrivire

Diferenţa dintre limbaje imperative şi descriptive


RECAPITULARE

Cum sunt parcurse clauzele?

Întrebări şi exerciţii:

Ce se poate întâmpla schimbând ordinea instrucţiunilor?

Cum se rezolvă întrebările cu mai multe predicate?

S-ar putea să vă placă și