Sunteți pe pagina 1din 14

Laborator 1-2

INTRODUCERE N LIMBAJUL PROLOG


Noiuni teoretice
n Prolog se poate ajunge la soluii prin inferen logic (deducie logic) pornind de la
ceva cunoscut n prealabil. Tipic, un program n limbajul Prolog nu este o secven de aciuni ci o
mulime de fapte i reguli care mpreun duc la nite concluzii logice. Prolog este ceea ce numim un
limbaj declarativ.
Prolog lucreaz cu aa numitele predicate logice. Un predicat este o form foarte clar i
concis de a exprima un fapt existent. Se utilizeaz o sintax foarte simpl, apropiat de limbajul
natural pentru a exprima un predicat logic.
Limbajul Prolog conine un motor de inferen care efectueaz deduciile logice pornind de
la nite fapte cunoscute. Prolog ncearc s deduc dac o ipotez este adevrat (cu alte cuvinte s
rspund la ntrebri) prin interogarea unui set de informaii deja adevrate.
O alt caracteristic important a limbajului Prolog este aceea c gsete toate soluiile unei
probleme. Prolog nu parcurge baza de date logic pur i simplu ci, dup gsirea unei soluii la o
problem, poate face o revenire pentru gsirea altor soluii.

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:

Lui Bogdan i place geometria.


place(bogdan, geometria).
Luciei i place chimia.
place(lucia, chimia).
Lui Bogdan i plac perele.
place(bogdan,pere).
Frunzele sunt verzi.
verde(frunze).
Trandafirul este floare.
floare(trandafir).
Regulile permit deducia unor fapte din alte fapte (inferena). Altfel spus, o regul este o
concluzie care este adevrat dac una sau mai multe concluzii sau fapte sunt adevrate.

Introducere n limbajul Prolog

Exemple:
n limbaj natural:

n Prolog:

Luciei i place tot ce i place i lui place(lucia,Ceva):-place(bogdan,


Bogdan.
Ceva).
Danei i plac toate florile.
place(dana,Ceva):-floare(Ceva).
Simbolul :- se poate interpreta ca if i servete la separarea celor dou pri ale unei
reguli: antet i corp. Se poate de asemenea interpreta o regul ca o procedur. Cu alte cuvinte,
regulile anterioare se mai pot interpreta i astfel: Pentru a demonstra c Luciei i place ceva,
demonstreaz c i lui Bogdan i place acelai lucru, respectiv Pentru a demonstra c Danei i
place ceva, demonstreaz c acel ceva este floare.

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:

n Prolog se poate interoga:

Ce i place Luciei?

place(lucia,Ce).

Se poate observa c sintaxa Prolog nu se schimb cnd se pune o ntrebare. O astfel de


interogare, din punct de vedere sintactic arat ca un fapt. Se remarc faptul c al doilea obiect Ce
este scris cu liter mare, n timp ce primul obiect lucia este scris cu liter mic. Motivul este
c lucia este o constant, este ceva fix, iar Ce este o variabil, iar variabilele ncep cu liter
mare sau cu caracterul _. Prolog ntotdeauna va ncerca s rspund la o interogare prin
cercetarea faptelor ncepnd de la nceput spre sfrit. La ntrebarea Ce i place Luciei, Prolog va
rspunde:
Ce=geometria
Ce=chimia
2 Solutions
Se pot forma interogri compuse pentru a afla o soluie dac subtestul A i subtestul B sunt
adevrate, separnd prin virgul (,) aceste dou subteste. n acest caz se spune c s-a utilizat
conjuncia. Exist ns posibilitatea utilizrii i a disjunciei, prin separarea celor dou subteste A
i B prin caracterul ;.

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:

Lui Dan i place fotbalul.

Anei i place voleiul.

Lui Bogdan i place voleiul i tenisul.

Elenei i place tenisul.

Lui Dan i place acel sport care i place i lui Bogdan.


S se scrie un program Prolog care rspunde ntrebrii: Ce sporturi i plac lui Dan?

Introducere n limbajul Prolog

Programul corespunztor problemei este:


predicates
nondeterm place(symbol,symbol)
clauses
place(dan, fotbal).
place(ana,volei).
place(bogdan,volei).
place(bogdan,tenis).
place(elena,tenis).
place(dan,Sport):place(bogdan, Sport).
goal
place(dan,Ce).
Analiza programului:
Testul goal va furniza n fereastra de ieire urmtorul rezultat:
Ce=fotbal
Ce=volei
Ce=tenis
3 Solutions
Programul este structurat pe trei seciuni. n prima seciune s-a declarat predicatul place cu
dou argumente de tip symbol.
n seciunea legat de clauze sunt declarate cinci fapte i o regul corespunztoare
afirmaiilor din enun. Ultima clauz este o regul, care n limbaj natural corespunde urmtoarei
propoziii: Lui Dan i place un sport dac i lui Bogdan i place acel sport. n aceast regul
antetul este place(dan,Sport) i corpul place(bogdan,Sport).
Ultima seciune corespunde ntrebrii din enunul problemei, ntrebare redat de interogarea
place(dan,Ce).
n interogarea place(dan,Ce) variabila Ce este o variabil liber, valoarea sa este
necunoscut pn n momentul n care se gsete o soluie. n schimb argumentul dan 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. La prima cutare, pentru c se poate realiza o
potrivire ntre primul argument de la interogare cu primul argument al primului fapt, variabila liber
Ce va deveni legat de atomul fotbal, obinndu-se astfel o prim soluie. Cutarea nu se oprete
aici, variabila Ce devine din nou liber i se ncearc o nou potrivire la urmtorul fapt. Se observ
c primul argument de la interogare, atomul dan, nu mai poate fi unificat cu primul argument de la
celelalte fapte din seciunea de clauze.
O astfel de potrivire se mai realizeaz doar cu antetul regulii definite n seciunea de clauze.
n acest moment variabila liber Ce se unific cu variabila liber Sport, iar cutarea se va reduce
acum la ndeplinirea obiectivului din corpul acestei reguli. Astfel, parcurgnd lista de clauze, se
poate observa c se realizeaz potrivire cu faptul al treilea i al patrulea, obinndu-se nc dou
soluii.
Aplicaia 2
Se d urmtoarea baz de cunotine:

Laborator 1-2

Anei i place s citeasc.

Adelei i place s cnte i s noate.

Lui Marius i place s noate.

Lui Bogdan i place s deseneze i s citeasc.


S se scrie un program Prolog care rspunde ntrebrii: Care este persoana creia i place s
citeasc i s deseneze?
Programul corespunztor problemei este:
predicates
nondeterm place(symbol,symbol)
clauses
place(ana,citeste).
place(adela,canta).
place(adela,inoata).
place(marius, inoata).
place(bogdan,deseneaza).
place(bogdan,citeste).
goal
place(Persoana,citeste), place(Persoana,deseneaza).
Analiza programului:
Testul goal va furniza n fereastra de ieire urmtorul rezultat:
Persoana=bogdan
1 Solution
Programul este structurat pe trei seciuni. n prima seciune s-a declarat predicatul place cu
dou argumente de tip symbol. n seciunea legat de clauze sunt declarate ase fapte
corespunztoare afirmailor din enun. Ultima seciune corespunde ntrebrii din enunul problemei,
ntrebare redat de interogarea compus place(Persoana,citeste), place(Persoana,deseneze).
Prolog va rezolva aceast interogare cutnd n lista de fapte de la nceput spre sfrit,
utiliznd mecanismul de cutare cu revenire. n prima parte a interogrii variabila Persoana este o
variabil liber, valoarea sa este necunoscut pn n momentul n care se gsete o soluie. n
schimb argumentul citeste este cunoscut. La prima cutare, pentru c se poate realiza o potrivire
ntre al doilea argument de la interogare cu primul argument al primului fapt, variabila liber
Persoana va deveni legat de atomul ana. A doua parte a interogrii devine: place(ana,deseneaza).
Negsindu-se un fapt care s corespund celei de a doua pri a interogrii, cutarea se ncheie cu
eec la acest pas.
Cutarea nu se oprete aici, variabila Persoana devine din nou liber i se ncearc o nou
potrivire la urmtorul fapt. Se observ c al doilea argument din prima parte a interogrii, atomul
citeste, poate fi unificat cu al doilea argument de la ultimul fapt din seciunea de clauze. n acest
moment variabila liber Persoana va deveni legat de atomul bogdan, iar cutarea se va reduce
acum la ndeplinirea prii a doua a interogrii care devine: place(bogdan,deseneaza). Astfel,
parcurgnd lista de clauze, se poate observa c se realizeaz potrivire cu penultimul fapt, obinnduse astfel o soluie.
Aplicaia 3

Introducere n limbajul Prolog

Se d urmtoarea baz de cunotine:

Elena este femeie.

Roxana este femeie.

Ioana este femeie.

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 mam?
Programul corespunztor problemei este:
predicates
nondeterm femeie(symbol)
nondeterm parinte(symbol,symbol)
nondeterm mama(symbol)
clauses
femeie(elena).
femeie(roxana).
femeie(ioana).
parinte(ioana,paul).
parinte(paul,roxana).
parinte(mihai,ioana).
parinte(elena,ionut).
mama(A):femeie(A),
parinte(A,_).
goal
mama(Mama).
Analiza programului:
Testul goal va furniza n fereastra de ieire urmtorul rezultat:
Mama=elena
Mama=ioana
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 femeie i mama cu un argument
de tip symbol. n seciunea legat de clauze este definit predicatul femeie prin trei fapte, predicatul
parinte prin patru fapte i predicatul mama printr-o regul. n definiia regulii este utilizat variabila
anonim, pentru c al doilea 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
mama(Mama). n interogare variabila Mama este o variabil liber, valoarea sa este necunoscut
pn n momentul n care se gsete o soluie.

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:

Ioan este brbat.

Mihai este brbat.

Bogdan este brbat.

Dan este brbat.

Ioan este printele Anei.

Elena este printele Anei.

Ana este printele Roxanei.

Bogdan este printele lui Paul.

Dan este printele Mihaelei.

Mihaela este printele lui Bogdan.


S se scrie un program Prolog care rspunde ntrebrii: Cine este bunic?
Programul corespunztor problemei este:
predicates
nondeterm barbat(symbol)
nondeterm parinte(symbol,symbol)
nondeterm bunic(symbol)
clauses
barbat(ioan).
barbat(mihai).
barbat(bogdan).
barbat(dan).
parinte(ioan,ana).
parinte(elena,ana).

Introducere n limbajul Prolog

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:

Maria este mama lui Dan.

Mihai este fratele Mariei.

Ion este tatl Mariei.

Ana este mama lui Mihai.

George este fiul lui Mihai.


S se scrie un program Prolog care rspunde ntrebrii: Cum se numesc bunicii lui George?
Programul corespunztor problemei este:
predicates
nondeterm parinte(symbol,symbol)
frate(symbol,symbol)
nondeterm bunic(symbol,symbol)
clauses
parinte(maria,dan).
parinte(ion,maria).
parinte(ana,mihai).
parinte(mihai,george).
frate(mihai,maria).
bunic(X,Y):parinte(Z,Y), parinte(X,Z).
bunic(X,Y):parinte(T,Y), frate(T,Z),
parinte(X,Z).
goal
bunic(Cine,george).

10

Introducere n limbajul Prolog

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

Dana este sora lui Vlad.


Mihaela locuiete mpreun cu copiii ei.
Mihaela locuiete n Deva.
S se scrie un program Prolog care rspunde ntrebrii: Unde locuiete Lucia?
Programul corespunztor problemei este:
predicates
nondeterm frate(symbol,symbol)
mama(symbol,symbol)
nondeterm loc(symbol,symbol)
clauses
frate(vlad,lucia).
frate(vlad,dana).
mama(mihaela,vlad).
loc(mihaela,deva).
loc(X,Y):mama(mihaela,X),
loc(mihaela,Y).
loc(X,Y):frate(Z,X),
mama(mihaela,Z),
loc(mihaela,Y).
goal
loc(lucia,Localitate).
Analiza programului:
Testul goal va furniza n fereastra de ieire urmtorul rezultat:
Localitate=deva
1 Solution
Programul este structurat pe trei seciuni. n prima seciune s-au declarat trei predicate:
mama, frate i loc cu dou argumente de tip symbol. n seciunea legat de clauze este definit
predicatul frate prin dou fapte, predicatul mama printr-un fapt i predicatul loc printr-un fapt i
dou reguli. Ultima seciune corespunde ntrebrii din enunul problemei, ntrebare redat de
interogarea loc(dana,Localitate). n interogare variabila Localitate este o variabil liber, valoarea
sa este necunoscut pn n momentul n care se gsete o soluie. n schimb argumentul dana 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 regulii.
Neputndu-se realiza potrivire cu faptul din definiia predicatului loc, se ncearc
ndeplinirea celor dou obiective din definiia primei 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
mama(mihaela,lucia) i se observ c nu poate fi ndeplinit.

12

Introducere n limbajul Prolog

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

Introducere n limbajul Prolog

Daniela este printele Mihaelei.


Mihaela este printele Bianci.
S se scrie un program Prolog care rspunde ntrebrii: Cine este bunic?
3. Se d urmtoarea baz de cunotine.
Mircea este tatl Danei.
Mihaela este sora lui Mircea.
Gheorghe este tatl Mihaelei.
Elena este mama lui Mircea.
Laura este fiica Mihaelei.
S se scrie un program Prolog care rspunde ntrebrii: Cum se numesc bunicii Laurei?
4. Se d urmtoarea baz de cunotine.
Toi elevii cu vrsta de peste 15 ani de la colegiul de informatic merg n excursie.
Ioan este tatl lui Ovidiu.
Toi fraii lui Silviu sunt elevi la colegiul de informatic.
Silviu este biatul lui Ioan.
Copiii lui Ioan care sunt elevi la colegiul de informatic au cel puin 15 ani.
Acum este anul 2010.
S se scrie un program Prolog care rspunde ntrebrii: Va merge Ovidiu n excursie?

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