Lab 1-2

20
Laborator 1-2 INTRODUCERE ÎN LIMBAJUL PROLOG Noţiuni teoretice În Prolog se poate ajunge la soluţii prin inferenţă logică (deducţie logică) pornind de la ceva cunoscut în prealabil. Tipic, un program în limbajul Prolog nu este o secvenţă de acţiuni ci o mulţime de fapte şi reguli care împreună duc la nişte concluzii logice. Prolog este ceea ce numim un limbaj declarativ. Prolog lucrează cu aşa 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 conţine un motor de inferenţă care efectuează deducţiile logice pornind de la nişte fapte cunoscute. Prolog încearcă să deducă dacă o ipoteză este adevărată (cu alte cuvinte să răspundă la întrebări) prin interogarea unui set de informaţii deja adevărate. O altă caracteristică importantă a limbajului Prolog este aceea că găseşte toate soluţiile unei probleme. Prolog nu parcurge baza de date logică pur şi simplu ci, după găsirea unei soluţii la o problemă, poate face o revenire pentru găsirea altor soluţii. Fapte şi reguli Un program Prolog defineşte obiecte şi relaţii, apoi defineşte reguli bazate pe aceste relaţii. De exemplu propoziţia: Lui Mihai îi plac caii. arată o relaţie dintre obiectele Mihai şi caii. O regulă care arată când propoziţia anterioară este adevărată: Lui Mihai îi plac caii dacă caii sunt pur-sânge. În Prolog o relaţie între obiecte este numită predicat. În limbaj natural o relaţie între obiecte este exprimată printr-o propoziţie. În cadrul logicii predicatelor, o relaţie este 1

description

laborator

Transcript of Lab 1-2

2

2112 Introducere n limbajul Prolog13 Laborator 1-2

INTRODUCERE N LIMBAJUL PROLOGNoiuni teoreticen 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.Exemple:

n limbaj natural:n Prolog:

Luciei i place tot ce i place i lui Bogdan.place(lucia,Ceva):-place(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 fi:n Prolog se poate interoga:

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 SolutionsSe 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 ;. 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.PredicateDenumirea 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 rezolvateAplicaia 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?

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 SolutionsProgramul 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: 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=bogdan1 SolutionProgramul 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, obinndu-se astfel o soluie.Aplicaia 3

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=elenaMama=ioana 2 SolutionsProgramul 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.

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).

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 SolutionsProgramul 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 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 5Se 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).

Analiza programului:

Testul goal va furniza n fereastra de ieire urmtorul rezultat:

Cine=anaCine=ion2 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.

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=deva1 SolutionProgramul 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.

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:

yesProgramul 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.

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?