Documente Academic
Documente Profesional
Documente Cultură
Fapte i reguli
Un program Prolog definete obiecte i relaii, apoi definete reguli bazate pe aceste relaii.
De exemplu propoziia:
Lui Mihai i plac caii.
arat o relaie dintre obiectele Mihai i caii. O regul care arat cnd propoziia anterioar este
adevrat:
Lui Mihai i plac caii dac caii sunt pur-snge.
n Prolog o relaie ntre obiecte este numit predicat. n limbaj natural o relaie ntre obiecte
este exprimat printr-o propoziie. n cadrul logicii predicatelor, o relaie este exprimat printr-o
simpl fraz un fapt care const dintr-un nume de relaie i unul sau mai multe obiecte (ntre
paranteze). Ca i propoziiile, faptele se ncheie cu punct.
Exemple:
n limbaj natural:
n Prolog:
Exemple:
n limbaj natural:
n Prolog:
Interogri
Dup ce s-au furnizat cteva fapte i reguli unui program Prolog, acestuia i se pot pune
ntrebri, numite interogri.
n limbaj natural o ntrebare ar putea n Prolog se poate interoga:
fi:
i place lui Bogdan geometria?
place(bogdan,geometria).
La aceast interogare Prolog rspunde:
yes
O alt interogare ar putea fi:
Ce i place Luciei?
place(lucia,Ce).
Laborator 1-2
Variabile
n Prolog variabilele permit scrierea de fapte, reguli i interogri. n limbaj natural utilizm
variabilele n propoziii tot timpul. n limbaj natural putem face afirmaia: Lui Ionu i place acelai
lucru ca i lui Mircea. Pentru a reprezenta o variabil n Prolog, aceasta trebuie scris cu prima
liter mare sau cu liniua de subliniere. n exemplul urmtor:
place(ionu, Obiect)
Obiect este o variabil i nu un atom, cum este ionu.
Variabile anonime sunt utile atunci cnd sunt necesare numai anumite informaii dintr-o
interogare, alte informaii putnd fi ignorate. n Prolog variabila anonim se reprezint prin
caracterul _ (underscore). O variabil anonim se poate utiliza n locul oricrei alte variabile.
Diferena dintre o variabil anonim i o variabil obinuit este aceea c o variabil anonim nu va
primi niciodat valoare.
Se poate afirma c Prolog nu are instruciuni de atribuire; acest lucru difereniaz limbajul
Prolog fa de alte limbaje de programare. n Prolog variabilele primesc valori prin potrivire cu
constante n fapte sau reguli.
Pn n momentul n care primete o valoare, variabilele sunt numite libere; n momentul
n care o variabil primete o valoare ea devine variabil legat. Ea rmne legat atta timp ct
este nevoie pentru a furniza o soluie la o interogare, dup care variabila respectiv devine din nou
liber, n vederea obinerii altor soluii.
Predicate
Denumirea simbolic a unei relaii este predicat. Obiectele care sunt legate printr-un
predicat poart numele de argumente. n faptul place(bogdan,geometria), relaia place este un
predicat, iar bogdan i geometria sunt argumentele sale.
n continuare sunt prezentate exemple de predicate Prolog cu zero sau mai multe argumente.
persoana(nume, prenume, sex)
data_nasterii(nume, data)
tara(denumire,continent,populatie,suprafata)
place(symbol,symbol)
functia(real,real)
triunghi(real,real,real)
determina
Aplicaii rezolvate
Aplicaia 1
Se d urmtoarea baz de cunotine:
Laborator 1-2
Laborator 1-2
Prolog va rezolva aceast interogare cutnd n lista de fapte i reguli de la nceput spre
sfrit, utiliznd mecanismul de cutare cu revenire. Pentru c predicatul din interogare este definit
printr-o regul, cutarea soluiilor se va reduce la ndeplinirea celor dou subobiective ale regulii.
La prima cutare variabila liber Mama se va lega de atomul din prima definiie a
predicatului femeie. Astfel, al doilea subobiectiv al regulii devine parinte(elena, _). Pentru c al
doilea argument al acestui subobiectiv este variabil anonim, se va cuta n seciunea unde este
definit predicatul parinte dac exist un fapt al crui prin argument s fie atomul elena. Pentru c
exist un fapt cu aceast proprietate, se obine o prim soluie.
n continuare variabila Mama redevine o variabil liber i va fi legat de atomul roxana.
Astfel, al doilea subobiectiv al regulii devine parinte(roxana, _). Pentru c nu exist nici un fapt n
definiia predicatului parinte al crui prin argument s fie atomul roxana, cutarea se ncheie cu
eec la acest pas.
Variabila Mama redevine o variabil liber i va fi legat de atomul ioana, iar al doilea
subobiectiv al regulii devine parinte(ioana, _). Pentru c primul fapt din definiia predicatului
parinte are ca prim argument atomul ioana, cutarea se ncheie cu obinerea unei noi soluii la acest
pas.
Variabila Mama redevine o variabil liber i, deoarece nu mai exist o alt posibilitate de a
deveni legat de un alt atom, cutarea se ncheie cu obinerea a dou soluii.
Aplicaia 4
Se d urmtoarea baz de cunotine:
parinte(ana,roxana).
parinte(bogdan,paul).
parinte(dan,mihaela).
parinte(mihaela,bogdan).
bunic(Bunic):barbat(Bunic),
parinte(Bunic,X),
parinte(X,_).
goal
bunic(Bunic).
Analiza programului:
Testul goal va furniza n fereastra de ieire urmtorul rezultat:
Bunic=ioan
Bunic=dan
2 Solutions
Programul este structurat pe trei seciuni. n prima seciune s-au declarat trei predicate:
predicatul parinte cu dou argumente de tip symbol i predicatele barbat i bunic cu un argument de
tip symbol. n seciunea legat de clauze este definit predicatul barbat prin patru fapte, predicatul
parinte prin ase fapte i predicatul bunic printr-o regul. n definiia regulii este utilizat variabila
anonim, pentru c al treilea subobiectiv al regulii furnizeaz soluii privitoare la ce persoane sunt
prinii cuiva, dar nu intereseaz ai cui prini sunt acetia. Ultima seciune corespunde ntrebrii
din enunul problemei, ntrebare redat de interogarea bunic(Bunic). n interogare variabila Bunic
este o variabil liber, valoarea sa este necunoscut pn n momentul n care se gsete o soluie.
Prolog va rezolva aceast interogare cutnd n lista de fapte i reguli de la nceput spre
sfrit, utiliznd mecanismul de cutare cu revenire. Pentru c predicatul din interogare este definit
printr-o regul, cutarea soluiilor se va reduce la ndeplinirea celor trei subobiective ale regulii.
La prima cutare variabila liber Bunic se va lega de atomul din prima definiie a
predicatului barbat. Astfel, al doilea subobiectiv al regulii devine parinte(ioan,X), unde X este o
variabil liber. Se va cuta n seciunea unde este definit predicatul parinte dac exist un fapt al
crui prin argument s fie atomul ioan. Pentru c exist un fapt cu aceast proprietate, variabila
liber va deveni legat de atomul ana. Al treilea subobiectiv al regulii devine parinte(ana, _). Se va
cuta n seciunea unde este definit predicatul parinte dac exist un fapt al crui prin argument s
fie atomul ana. Pentru c exist un fapt cu aceast proprietate, se obine o prim soluie. Se revine
la al doilea obiect al interogrii, iar variabila X devine independent. Deoarece nu mai exist o alt
posibilitate pentru variabila X de a deveni legat de un alt atom, se revine la primul obiectiv i
variabila Bunic devine liber.
n continuare variabila Bunic va fi legat de atomul mihai. Astfel, al doilea subobiectiv al
regulii devine parinte(mihai,X). Pentru c nu exist nici un fapt n definiia predicatului parinte al
crui prin argument s fie atomul mihai, cutarea se ncheie cu eec la acest pas. Variabila Bunic
redevine o variabil liber i va fi legat de atomul bogdan, iar al doilea subobiectiv al regulii
devine parinte(bogdan,X). Se va cuta n seciunea unde este definit predicatul parinte dac exist
un fapt al crui prin argument s fie atomul bogdan. Pentru c exist un fapt cu aceast proprietate,
variabila liber va deveni legat de atomul paul. Al treilea subobiectiv al regulii devine
Laborator 1-2
parinte(paul, _). Se va cuta n seciunea unde este definit predicatul parinte dac exist un fapt al
crui prin argument s fie atomul paul. Pentru c nu exist un fapt cu aceast proprietate, cutarea
se ncheie cu eec. Se revine la al doilea obiect al interogrii, iar variabila X devine independent.
Deoarece nu mai exist o alt posibilitate pentru variabila X de a deveni legat de un alt atom, se
revine la primul obiectiv i variabila Bunic devine liber.
Variabila liber Bunic se va lega acum de atomul dan. Astfel, al doilea subobiectiv al regulii
devine parinte(dan,X), unde X este o variabil liber. Se va cuta n seciunea unde este definit
predicatul parinte dac exist un fapt al crui prin argument s fie atomul dan. Pentru c exist un
fapt cu aceast proprietate, variabila liber va deveni legat de atomul mihaela. Al treilea
subobiectiv al regulii devine parinte(mihaela, _). Se va cuta n seciunea unde este definit
predicatul parinte dac exist un fapt al crui prin argument s fie atomul mihaela. Pentru c exist
un fapt cu aceast proprietate, se obine nc o soluie. Se revine la al doilea obiect al interogrii, iar
variabila X devine independent. Deoarece nu mai exist o alt posibilitate pentru variabila X de a
deveni legat de un alt atom, se revine la primul obiectiv. Variabila Bunic redevine o variabil liber
i, pentru c nu mai exist o alt posibilitate de a deveni legat de un alt atom, cutarea se ncheie
cu obinerea a dou soluii.
Aplicaia 5
Se d urmtoarea baz de cunotine:
10
Analiza programului:
Testul goal va furniza n fereastra de ieire urmtorul rezultat:
Cine=ana
Cine=ion
2 Solutions
Programul este structurat pe trei seciuni. n prima seciune s-au declarat trei predicate:
parinte, frate i bunic cu dou argumente de tip symbol. n seciunea legat de clauze este definit
predicatul parinte prin patru fapte, predicatul frate printr-un fapt i predicatul bunic prin dou
reguli. Ultima seciune corespunde ntrebrii din enunul problemei, ntrebare redat de interogarea
bunic(Cine,george). n interogare variabila Cine este o variabil liber, valoarea sa este necunoscut
pn n momentul n care se gsete o soluie. n schimb argumentul george este cunoscut.
Prolog va rezolva aceast interogare cutnd n lista de fapte i reguli de la nceput spre
sfrit, utiliznd mecanismul de cutare cu revenire. Pentru c predicatul din interogare este definit
prin dou reguli, cutarea soluiilor se va reduce la ndeplinirea subobiectivelor acestor reguli.
Se ncearc ndeplinirea celor dou obiective din definiia primei reguli. Variabila liber Y se
va lega de atomul george ce reprezint al doilea argument al predicatului din interogare, iar
variabila liber Cine se va lega de variabila liber X. Astfel primul subobiectiv al acestei reguli
devine parinte(Z,george) i se va urmri ndeplinirea acestuia. Se observ c se poate realiza
potrivire ntre acest subobiectiv i ultimul fapt din secvena de program unde este definit predicatul
parinte, variabila liber Z devenind legat de atomul mihai. Al doilea subobiectiv al regulii devine
parinte(Cine,mihai). Pentru c n definiia predicatului parinte exist un fapt care are ca al doilea
argument atomul mihai, variabila liber Cine devine legat de atomul ana, obinndu-se o prim
soluie.
Variabila X revine o variabil liber i, deoarece nu se mai poate realiza o alt potrivire, se
revine la primul subobiectiv, iar variabila Z va fi din nou liber.
Pentru c nu se mai poate realiza o alt potrivire, se trece la a doua regul ce definete
predicatul parinte i se ncearc ndeplinirea celor trei subobiective ale acestei reguli. Variabila
liber Y se va lega de atomul george ce reprezint al doilea argument al predicatului din interogare,
iar variabila liber Cine se va lega de variabila liber X. Astfel primul subobiectiv al acestei reguli
devine parinte(T,george) i se va urmri ndeplinirea acestuia. Se observ c se poate realiza
potrivire ntre acest subobiectiv i ultimul fapt din secvena de program unde s-a definit predicatul
parinte, variabila liber T devenind legat de atomul mihai. Al doilea obiectiv al regulii devine
frate(mihai,Z). Predicatul frate fiind definit printr-un singur fapt, se observ c se poate realiz
potrivire, variabila Z devenind legat de atomul maria. Al treilea subobiectiv al regulii devine
parinte(Cine,maria). Pentru c n definiia predicatului parinte exist un fapt care are ca al doilea
argument atomul maria, variabila liber Cine devine legat de atomul ion, obinndu-se nc o
soluie.
Variabilele Cine, Z i T redevin variabile libere i, pentru c nu mai exist alte posibiliti de
a deveni legate, cutarea se ncheie cu obinerea a dou soluii.
Aplicaia 6
Se d urmtoarea baz de cunotine:
Vlad este fratele Luciei.
Mihaela este mama lui Vlad.
Laborator 1-2
11
12
Se trece la a doua regul ce definete predicatul loc i se ncearc ndeplinirea celor trei
subobiective ale acestei reguli. Variabila liber X se va lega de atomul lucia ce reprezint primul
argument al predicatului din interogare, iar variabila liber Localitate se va lega de variabila liber
Y. Astfel primul subobiectiv al acestei reguli devine frate(Z,lucia) i se va urmri ndeplinirea
acestuia. Se observ c se poate realiza potrivire ntre acest subobiectiv i primul fapt din secvena
de program unde s-a definit predicatul frate, variabila liber Z devenind legat de atomul vlad. Al
doilea obiectiv al regulii devine mama(mihaela,vlad). Predicatul mama fiind definit printr-un
singur fapt, se observ c acest subobiectiv este ndeplinit. Al treilea subobiectiv al regulii devine
loc(mihaela,Localitate). Pentru c n definiia predicatului loc exist un fapt care are ca prim
argument atomul mihaela, variabila liber Localitate devine legat de atomul deva, obinndu-se o
soluie.
Aplicaia 7
Se d urmtoarea baz de cunotine:
Toi prietenii Luciei avnd vrsta de peste 10 ani merg la coal.
Marius este fratele Alexandrei.
Toi fraii Alexandrei sunt nscui naintea anului 2000.
Lucia este prieten cu toi fraii Alexandrei.
Acum este anul 2010.
S se scrie un program Prolog care rspunde ntrebrii: Merge Marius la coal?
Programul corespunztor problemei este:
predicates
frate(symbol,symbol)
nascut(symbol,integer)
prieten(symbol,symbol)
prezent(integer)
scoala(symbol)
clauses
frate(alexandra,marius).
nascut(X,2000):frate(alexandra,X).
prieten(lucia,X):frate(alexandra,X).
prezent(2010).
scoala(X):prieten(lucia,X),
nascut(X,N),
prezent(An),
An-N>=10.
goal
scoala(marius).
Analiza programului:
Testul goal va furniza n fereastra de ieire urmtorul rezultat:
Laborator 1-2
13
yes
Programul este structurat pe trei seciuni. n prima seciune s-au declarat cinci predicate:
frate, nscut, prieten, prezent i scoala cu unul sau dou argumente de tip symbol, respectiv integer.
n seciunea legat de clauze sunt definite predicatele frate i prezent prin cte un fapt, iar
predicatele nascut, prieten i scoala prin cte o regul. Ultima seciune corespunde ntrebrii din
enunul problemei, ntrebare redat de interogarea scoala(marius).
Prolog va rezolva aceast interogare cutnd n lista de fapte i reguli de la nceput spre
sfrit, utiliznd mecanismul de cutare cu revenire. Pentru c predicatul din interogare este definit
printr-o regul, cutarea soluiilor se va reduce la ndeplinirea celor patru subobiective ale acestei
reguli.
Variabila liber X se va lega de atomul marius ce reprezint argumentul predicatului din
interogare. Astfel primul subobiectiv al acestei reguli devine prieten(lucia,marius) i se va urmri
ndeplinirea acestuia. Predicatul prieten fiind definit printr-o regul, verificarea se reduce la
ndeplinirea subobiectivului frate(alexandra,marius). n seciunea de clauze unde este definit
predicatul frate se gsete acest fapt, deci primul subobiectiv din corpul regulii corespunztoare
predicatului din interogare este ndeplinit.
Al doilea subobiectiv devine nascut(marius,N). Predicatul nascut fiind definit printr-o
regul, subobiectivul ce urmeaz a fi ndeplinit devine frate(alexandra,marius), iar variabila liber
N devine legat de atomul 2000. Predicatul frate fiind definit printr-un singur fapt, se observ c
acest subobiectiv este ndeplinit. Al treilea subobiectiv duce la legarea variabilei libere An de
atomul 2010.
Ultimul obiectiv devine 2010-2000>=10 i, fiind adevrat, cutarea se ncheie cu succes.
Aplicaii propuse
1. Se d urmtoarea baz de cunotine.
Paul este brbat.
Vasile este brbat.
Mihai este brbat.
Ioana este printele lui Paul.
Paul este printele Roxanei.
Mihai este printele Ioanei.
Elena este printele lui Ionu.
S se scrie un program Prolog care rspunde ntrebrii: Cine este tat?
2. Se d urmtoarea baz de cunotine.
Ioana este femeie.
Mihaela este femeie.
Elena este femeie.
Daniela este femeie.
Bianca este femeie.
Ioana este printele Anei.
Elena este printele Ioanei.
Ana este printele Roxanei.
Bianca este printele lui Paul.
14