Sunteți pe pagina 1din 6

Laborator 1 - Prolog

Programare logica

Page 1 of 6

Laborator # 1

Fundamentele Prolog-ului (fapte, reguli)

Un program Prolog este o colectie de clauze. Acestea pot fi de doua tipuri: fapte sau reguli.
Fapte Prolog

Un fapt precizeaza o proprietate a unui obiect sau exprima o relatie dintre mai multe obiecte.
De exemplu proprietatea florilor de a fi frumoase se poate exprima in Prolog prin urmatorul
fapt:
frumoase(flori).
iar preferinta pe care o are Dan pentru Maria se poate exprima prin:
place(dan,maria).
Forma generala prin care pot fi descrise faptele este:
relatie(obiect_1,obiect_2,...,obiect_n).
unde 'relatie' reprezinta un nume pentru relatia dintre obiectele 'obiect_1,...,obiect_n'.
Programatorul este cel care stabileste numele relatiei, precum si semnificatia ei. Astfel faptul
ca Dan o place pe Maria se poate exprima si prin
place(maria,dan).
Mai facem observatia ca faptele introduse in program sunt considerate a fi adevarate, adica
informatia pe care o furnizeaza este cunoscuta de sistem, fara ca acesta sa verifice daca este
relatie reala. De exemplu, faptul
verde(zapada).
este corect din punct de vedere sintactic, dar nu exprima o proprietate reala a zapezii.
Numele pentru relatii si obiecte trebuie sa satisfaca urmatoarele reguli:
a) numele de relatie trebuie sa inceapa cu o litera urmata de orice combinatie de litere cifre
sau _. Este recomandat ca primul simbol sa fie litera mica, iar numele sa fie ales astfel incat sa
sugereze relatia reprezentata;
b) numele de obiecte trebuie sa inceapa cu litera mica, urmata de oricate caractere.
Colectia de fapte se mai numeste baza de date(database).
Exemple:
Pentru reprezentarea proprietatilor si relatiilor de mai jos
Iarba este verde.
Ioana este studenta.
Dan are masina.
Ionut este fiul lui Dan si al Mariei.
se pot declara urmatoarele fapte:
verde(iarba).
student(ioana).
are(dan,masina).
fiu(ionut,dan,maria).

file://D:\De_Baza\WORDTEXTE\CLUMBA\STUDIUM\ASEM\PL-Asem\Laborator\... 04.09.2007

Laborator 1 - Prolog

Page 2 of 6

Reguli Prolog

O regula Prolog exprima o relatie de dependenta intre fapte si permite obtinerea unor
informatii noi pe baza celor deja cunoscute.
Forma generala prin care poate fi descrisa o regula este:
Capul_regulii if Corpul_regulii
sau
relatie(obiect,obiect,...,obiect) if
relatie(obiect,obiect,...,obiect) and
....
relatie(obiect,obiect,...,obiect).
semnificatia fiind ca daca toate relatiile din corpul regulii sunt adevarate atunci este adevarata
si relatia din capul regulii.
De exemplu cunoscand ca Maria le place pe Elena si pe Ioana, iar lui Dan ii place tot ce-i place s
Mariei, atunci putem scrie faptele:
place(maria,elena).
place(maria,ioana).
si urmatoarea regula:
place(dan,Cineva) if place(maria,Cineva).
In corpul regulii putem avea si relatii legate prin disjunctie (or) cu semnificatia ca relatia din
capul regulii este adevarata daca este adevarata una din relatiile din corpul regulii.
De exemplu fraza: 'Lui Dan ii plac lucrurile scumpe sau ii place tot ce-i place Mariei' se poate
exprima prin
place(dan,Ceva) if scump(Ceva) or place(maria,Ceva).
Regula de mai sus se mai poate scrie si astfel
place(dan,Ceva) if scump(Ceva).
place(dan,Ceva) if place(maria,Ceva).
Observatie

Urmatoarele simboluri sunt echivalente:


if :and ,
or ;
Variabile, variabile anonime

In TP numele de variabile trebuie sa inceapa cu majuscula sau _, urmate de oricate litere, cifre
sau _. De exemplu: Cineva, PERSOANA, Un_om, X.
O variabila care nu are valoare se numeste libera; valoarea o poate primi prin unificare, devenin
variabila legata (ATENTIE: variabilele nu pot fi folosite pentru stocarea informatiei!).

file://D:\De_Baza\WORDTEXTE\CLUMBA\STUDIUM\ASEM\PL-Asem\Laborator\... 04.09.2007

Laborator 1 - Prolog

Page 3 of 6

Variabila anomima (reprezentata prin _) se foloseste atunci cand valoarea la care se leaga nu
este folosita.
Constante

In TP sunt constante numele de obiecte si numerele (intregi sau reale). Exemplu: maria, dacia,
13, 18.5.
Interogarea bazei de date

Faptele si regulile contin informatii despre relatiile dintre obiecte. Intrebarile pe care le punem
sistemului se numesc 'goals' (= scopuri).
Forma generala a unui scop este:
relatie(obiect,obiect,...,obiect) and
....
relatie(obiect,obiect,...,obiect).
Scopurile pot fi interne sau externe. Un scop intern se declara in sectiunea care incepe cu
'goal', iar unul extern se introduce in fereastra de dialog, dupa rularea programului.
Exemple
Exemplul 1

/*********
Preferinte
***********/
predicates
place(symbol,symbol)

% primul il place pe al doilea

clauses
place(elena, tenis).
place(maria, inot).
place(maria,volei).
place(ion, fotbal).
place(mihai, baschet).
Exemplul 2

/******************
Program cu parintii
*******************/
predicates
masc(symbol)
fem(symbol)
parinte(symbol, symbol) % primul este parinte pentru al doilea
clauses
masc(vasile).
masc(alex).
fem(elena).

file://D:\De_Baza\WORDTEXTE\CLUMBA\STUDIUM\ASEM\PL-Asem\Laborator\... 04.09.2007

Laborator 1 - Prolog

Page 4 of 6

fem(mariuta).
parinte(vasile, alex).
parinte(elena, alex).
parinte(alex, mariuta).
Exemplul 3

/*************************************************************************
Autovehicule pentru care stiu: marca, kilometrajul, vechimea, culoarea,
pretul
*************************************************************************
predicates
masina(symbol,real,integer,symbol,integer)
camion(symbol,real,integer,symbol,integer)
clauses
masina(chrysler, 130000, 3, rosu, 48).
masina(ford, 90000, 4, gri, 100).
masina(datsun, 8000, 1, rosu, 120).
camion(ford, 80000, 6, bleu, 32).
camion(datsun, 50000, 5, galben, 80).
camion(toyota, 25000, 2, negru, 100).
Exemplul 4

/*********************************
Program cu parinti, mame si bunici
**********************************/
predicates
masc(symbol)
fem(symbol)
parinte(symbol, symbol)
mama(symbol,symbol)
bunica(symbol,symbol)
clauses
masc(vasile).
masc(alex).

% primul este parinte ptr al doilea


% mama celui de al doilea
% bunica celui de al doilea

fem(elena).
fem(mariuta).
parinte(vasile, alex).
parinte(elena, alex).
parinte(alex, mariuta).
mama(Persoana,Copil) if parinte(Persoana,Copil) and fem(Persoana).
bunica(Bunica,Nepot) if parinte(Persoana,Nepot) and mama(Bunica,
Persoana)
Exemplul 5

/**************************
Cum iti poti cumpara masina
**************************/
predicates

file://D:\De_Baza\WORDTEXTE\CLUMBA\STUDIUM\ASEM\PL-Asem\Laborator\... 04.09.2007

Laborator 1 - Prolog

Page 5 of 6

cumpara(symbol, symbol) % primul il cumpara pe al doilea


persoana(symbol)
masina(symbol)
place(symbol, symbol)
% primul il place pe al doilea
de_vanzare(symbol)
clauses
cumpara(X, Y) :persoana(X),
masina(Y),
place(X, Y),
de_vanzare(Y).
persoana(maria).
persoana(iulia).
masina(dacia).
masina(oltcit).
masina(lastun).
place(maria, dacia).
place(iulia, pizza).
place(iulia, fiat).
de_vanzare(pizza).
de_vanzare(dacia).
de_vanzare(oltcit).
Probleme

1. Se dau urmatoarele predicate:


tata(X,Y)
mama(X,Y)
masc(X)
fem(X)

/* X este tatal lui Y */


/* X este mama lui Y */
/* X este de sex masculin */
/* X este de sex feminin */

Sa se scrie reguli Prolog pentru urmatoarele relatii:


parinte(X,Y)
este_mama(X)
este_tata(X)
este fiu(X)
sora(X,Y)
bunic(X,Y)
matusa(X,Y)

/*
/*
/*
/*
/*
/*
/*

X
X
X
X
X
X
x

este
este
este
este
este
este
este

un parinte al lui Y */.


mama */
tata */
fiu */
sora lui Y */
bunicul lui Y */
matusa lui Y */

2. Se da o baza de date pentru reprezentarea cunostintelor despre carti, editurile care le


publica si magazinele care vand carti, cu fapte de tipul:
vinde(Mag,Edit)
carte(Tit,Edit)
deschis(Mag)
inchis(Mag)

/*
/*
/*
/*

magazinul Mag vinde carti ale editurii Edit */


titlul Tit este editat de editura Edit */
daca magazinul Mag este deschis */
daca magazinul Mag este inchis */

file://D:\De_Baza\WORDTEXTE\CLUMBA\STUDIUM\ASEM\PL-Asem\Laborator\... 04.09.2007

Laborator 1 - Prolog

Page 6 of 6

Sa se obtina raspunsuri la intrebari de tipul:


-

Cine publica "Mara"?


Ce magazine vand carti de la Nemira?
De unde pot cumpara "Fratii Jderi"?
Exista vreun editor care a publicat atat "Fratii Jderi" cat si "Mara"?
Exista doua magazine care vand atat "..." cat si "..."?

3. Modificati programul din 'Exemplul 5' astfel incat cumpararea unei masini sa se faca numai
daca pretul de vanzare nu depaseste economiile cumparatorului.

file://D:\De_Baza\WORDTEXTE\CLUMBA\STUDIUM\ASEM\PL-Asem\Laborator\... 04.09.2007

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