Sunteți pe pagina 1din 14

Prolog

1. Sintaxa
2. Raţionamente în Prolog – explicaţii simplificate
3. Folosirea operatorilor
- Expresii matematice.
- Operatorul is şi =
- Operatori logici
4. Folosirea listelor
5. Reguli recurente
Folosirea operatorilor
Gestionarea expresiilor matematice

. EcliPse permite lucrul cu numere reale (float)

. Operatori disponibili (atomi) pentru calcule matematice:

+, -, *, \, ^

 Pot fi folosiţi în
• forma predicat +(2,7) şi
• infix 2 + 7
Folosirea operatorilor – Gestionarea expresiilor matematice
Operatorii is şi =

Operatorul is
Calculele în expresii matematice se efectuează DOAR dacă se
foloseşte operatorul is
A is B – evaluează B și asignează valoarea obținută lui A/ A
este variabilă SAU A și B aceeași constantă numerică
X is 2 + 7.%X devine 9

2 + 7 is X %No

Operatorul =
Este pentru potrivire!!! şi este diferit de is

A = B – adevărat dacă există potrivire între A si B


Folosirea operatorilor – Gestionarea expresiilor matematice
Operatorii is şi =

Exemple - Diferenţa între is şi =


X is 2 + 7.% X devine 9

?- 9 is 2 + 7 %Yes: %se evaluează 2 + 7, apoi 9 is 9 true

?- 2 + 7 is 9 %No: %se evaluează 9, apoi +(2,7) is 9


false

?- 2 + 7 = 9 %No: +(2,7) nu se potriveste cu 9

?- X = 2 + 7. %true daca X se potriveste cu +(2, 7)


Folosirea operatorilor – Gestionarea expresiilor matematice
Operatorii is şi =

Exemple care să ilustreze rolul operatorului =


?- 3 = 3. %Yes. ?- 3 = 4. %No.

?- hello = hello. %Yes. ?- hello = 3. %No.

?- foo(a,2) = foo(a,2). %Yes.

?- foo(a,2) = foo(b,2).%No.

?- foo(a,2) = foo(a,2,c).%No.

?- foo(3,4) = 7.%No.

?- +(3,4) = 7.%No.
Folosirea operatorilor – Gestionarea expresiilor matematice
Alţi operatori

. Pentru comparaţii între valori numerice:

< > =< >=


este evaluat termenul
=\= % valori numerice diferite din stânga și din
dreapta
=:= %valori numerice egale

Atentie la diferenţa dintre =, =:= şi is


?- 2 * 3 =:= 6 %Yes
?- 2 * 3 = 6 % No
?- X is 2 * 3, X = 6 %Yes
?- X is 2 * 3, X =:= 6 %Yes
Folosirea operatorilor – Gestionarea expresiilor matematice
Exemple de funcţii matematice disponibile
– vezi predicatele disponibile

 min, max, sqrt, sin, etc

 float/1 pentru conversia unui întreg la float:


float(3) este 3.0

 round pentru rotunjire la cel mai apropiat întreg:


round(3.4) este 3,
round(3.5) este 4
Folosirea operatorilor
Operatori logici

\+ pentru negatie – NOT

, pentru conjunctie - AND

; pentru disjuncţie -OR


Scade prioritatea

In Prolog:
X=a; X=b, Z=X echivalent cu
X=a; (X=b, Z=X)
Folosirea operatorilor
Operatori logici
%film(Nume,Categorie,Durata,Premiat,ActoriCelebri).
film(f1,sf,mediu,nu,nu).
film(f2,sf,serial,nu,da).
film(f3,actiune,short,da,da).
film(f4,drama,mediu,da,nu).

alegFilm1(Nume):-
% alege film care este cu durata medie sau care este sf si premiat
film(Nume,Categorie,Durata,Premiat,_),
Durata=mediu;
Premiat=da,
Categorie=sf.

alegFilm2(Nume):-
% alege film care este sf si care este cu durata medie sau premiat
film(Nume,Categorie,Durata,Premiat,_),
(Durata=mediu;
Premiat=da),
Categorie=sf.
Folosirea operatorilor
Exemplu
note(mary,10,8,7).%note lab, test, colocviu.
note(joe,9,6,10).
note(charlie,8,9,4).
note(ann,6,8,5). Sau
medie(X,M):- note(X,L,T,C), L>=5, C>=5
L<5, C>=5
((L>=5, C>=5, M is L*0.2+T*0.3+C*0.5); L>=5, C<5
(L<5,M is 4);(C<5,M is 4)). L<5, C<5

rezultatBun(X):- medie(X,M), M>8.


rezultatSlab(X):- medie(X,M), M<5.
rezultatMediocru(X):-medie(X,M), M>=5,M=<8.

SAU:
rezultatMediocru(X):-medie(X,M), \+rezultatBun(X),
\+rezultatSlab(X).
Folosirea operatorilor
Exerciții
Mașini
Indicăm pentru anumite mașini
o consumul ideal la 100km,
o distanțele parcurse în săptămâna curentă: distante(Masina,
Dist, Zi) cu Zi- luni, marti etc (va fi o faptă pentru fiecare
masina in fiecare zi a săptămânii),
o volum inițial de combustibil in rezervor, volum final, volum
alimentare pe parcursul săptămânii
Calculam %depăsire consum de catalog.

o folosind liste se va putea considera o formulare mai generală – mai


multe fapte pentru a indica distante parcurse pentru aceeasi zi etc
Folosirea operatorilor
Exerciții
Cinematograf
Un cinematograf are un program de difuzare a filmelor. Pentru
simplitate consideram ca orarul este stabilit folosind intervale de
cate 3 ore: (1): 10-13, (2): 13-16, (3): 16-19, (4): 19-22. Un film
este difuzat intr-o singura sala.
Pentru fiecare sala cunoaștem numărul de spectatori din fiecare zi.
De asemenea cunoastem costul biletului pentru fiecare film.
Indicati cati spectatori a avut filmul X, ce incasari au fost obtinute
separat pe fiecare interval orar.
film(Nume, Sala, Interval1, Interval2,Interval3,Interval4).
%Interval1=0 – filmul nu este difuzat

spectatori(Sala,Zi,Numar1,Numar2,Numar3,Numar4).
Folosirea operatorilor
Exerciții
Rețetă medicamente
Pentru fiecare medicament indicăm câte grame sunt necesare din
fiecare substanța (număr de substanțe cunoscut)
Pentru un pacient indicăm ce medicamente ia – o singura fapta
per pacient, in care indicam 0/1 la fiecare medicament (număr de
medicamente cunoscut).
Calculați cantitatea consumată de pacientul X din substanța Y.
Indicați dacă pacientul X consumă mai multă substanța Y decât
substanță Z.
Folosirea operatorilor
Repetă
Operatori pentru calcule matematice în forma predicat/infix.

Operatori pentru compararea rezultatelor numerice


RECAPITULARE

Operatori logici

Întrebări şi exerciţii:

Care este diferenţa dintre is, = şi =:=?

Care este ordinea operaţiilor logice in Prolog?

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