Documente Academic
Documente Profesional
Documente Cultură
Prolog
1. Sintaxa
2. Raţionamente în Prolog explicaţii simplificate
- Raţionamente deductive prin potrivire (unificare)
- Diferenţa faţă de limbajele imperative
3. Folosirea operatorilor
4. Reguli recurente
5. Folosirea listelor
Logică computaţională - Prolog
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
parent(X,ana) cu
parent(X,fred)
Logică computaţională - Prolog
Raţionament în Prolog - sau găsirea răspunsului la
întrebări - explicaţii simplificate
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).
Logică computaţională - Prolog
Raţionament în Prolog - sau găsirea răspunsului la
întrebări - explicaţii simplificate
oras(ro, cluj).
oras(ro, iasi).
oras(uk, londra).
oras(fr, paris).
oras(fr, lyon).
fapte şi locuitorOras(iasi, ana).
reguli locuitorOras(iasi, mihai).
locuitorOras(cluj, marius).
locuitorTara(X,Y):-locuitorOras(Z,Y), oras(X,Z).
?- locuitorTara(Y,ana).
întrebare
Explicaţie răspuns:
locuitorTara(Y,ana):-locuitorOras(Z,ana), oras(Y,Z).
-locuitorOras(iasi,ana), oras(Y,iasi)
oras(ro,iasi)
Y=ro
Logică computaţională - Prolog
Raţionament în Prolog - explicaţii simplificate
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)
Logică computaţională - Prolog
Raţionament în Prolog- explicaţii simplificate
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)
X = my_functor(Y)
?- X = myfunctor(Y).
X = myfunctor(Y)
Y = Y
Yes (0.00s pu)
Logică computaţională - Prolog
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]
a(B, B).
?- a(1, X), a(X, Y), a(Y, Z), a(Z, 100).
Recomandări:
father(a,b).
% a este tatal lui b (1) 1 CALL grandparent(X, c)
mother(b,c). (2) 2 CALL parent(X, _1412)
(3) 3 CALL mother(X, _1412)
%b este mama lui c (3) 3 EXIT mother(b, c)
(2) 2 *EXIT parent(b, c) 21 pasi
grandparent(X,Y):-parent(X,Z), (4) 2 CALL parent(c, c)
(5) 3 CALL mother(c, c)
parent(Z,Y). (5) 3 FAIL mother(..., ...)
%X este bunicul lui Y (4) 2 NEXT parent(c, c)
(6) 3 CALL father(c, c)
(6) 3 FAIL father(..., ...)
parent(X,Y):-mother(X,Y). (4) 2 FAIL parent(..., ...) 13 pasi
(2) 2 REDO parent(X, _1412) (1) 1 CALL grandparent(a, X)
parent(X,Y):-father(X,Y). (7) 3 CALL father(X, _1412) (2) 2 CALL parent(a, _604)
(7) 3 EXIT father(a, b) (3) 3 CALL mother(a, _604)
(2) 2 EXIT parent(a, b) (3) 3 FAIL mother(..., ...)
(8) 2 CALL parent(b, c) (2) 2 NEXT parent(a, _604)
?- grandparent(X,c) (9) 3 CALL mother(b, c) (4) 3 CALL father(a, _604)
(9) 3 EXIT mother(b, c) (4) 3 EXIT father(a, b)
(8) 2 *EXIT parent(b, c) (2) 2 EXIT parent(a, b)
+(1) 1 *EXIT grandparent(a, c) (5) 2 CALL parent(b, X)
?- grandparent(a,X) (6) 3 CALL mother(b, X)
(6) 3 EXIT mother(b, c)
(5) 2 *EXIT parent(b, c)
(1) 1 *EXIT grandparent(a, c)
Logică computaţională - Prolog
Raţionament în Prolog - explicaţii simplificate
Ordinea instrucţiunilor - Exemplu
21 pasi
Logică computaţională - Prolog
Raţionament în Prolog - explicaţii simplificate
Ordinea instrucţiunilor - Exemplu
13 pasi 13 pasi
?- grandparent(X,c)
?- grandparent(a,X)
Logică computaţională - Prolog
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 o singura potrivire
nepermisa permisa
Logică computaţională - Prolog
Raţionament în Prolog - explicaţii simplificate
locuitorTara(X,Y):-
Q este adevărată locuitorOras(Z,Y),
oras(X,Z).
Programe Compactitate
+ -
Fiecare intrebare rezolvata
separat cu instructiuni in plus
Simplitate în - +
elaborare
Uneori greu de găsit regulile Multe exemple
Logică computaţională - Prolog
Raţionament în Prolog - explicaţii simplificate
Diferenţa faţă de limbajele imperative
Comparaţie Limbaj descriptiv [Prolog] Limbaj imperativ [C, C++]
Întrebări şi exerciţii: