Documente Academic
Documente Profesional
Documente Cultură
Programare logica
Page 1 of 6
Laborator # 1
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
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)
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).
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
/*
/*
/*
/*
/*
/*
/*
X
X
X
X
X
X
x
este
este
este
este
este
este
este
/*
/*
/*
/*
file://D:\De_Baza\WORDTEXTE\CLUMBA\STUDIUM\ASEM\PL-Asem\Laborator\... 04.09.2007
Laborator 1 - Prolog
Page 6 of 6
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