Sunteți pe pagina 1din 100

Programare logica

Curs 1: Introducere Mircea Marin

2 octombrie 2012

Marin

Programare logica

Aspecte organizatorice

Curs: Mircea Marin Laboratoare: Isabela Dramnesc


pagina web (curs): http://web.info.uvt.ro/mmarin/lectures/LP email: mmarin@info.uvt.ro

Materialele de curs vor postate pe pagina web. Evaluare:


1 examen scris nal (50% din nota) Participarea la probele Probe de laborator (50% din nota). de laborator este obligatorie.

Marin

Programare logica

Scopul s i planul cursului

Scopul cursului: Raspunsuri la urmatoarele ntrebari:


1 2

logice? Care sunt caracteristicile programarii Ce se poate face cu programarea logica?

tarea practicilor de programare n P ROLOG. nva Aplica tii specice. Planul cursului: Prezentarea limbajului de programare P ROLOG P ROLOG s i logica cu predicate de ordinul I Aplica tii: recursivitate, prelucrarea listelor, mecanisme specice (taiere, backtracking), etc.

Marin

Programare logica

Ce este programarea logica

Stil de programare bazat pe specicarea cuno stin telor ca fapte s i reguli, s i pe rezolvarea problemelor punnd al caror ntrebari raspuns se ob tine consultnd baza de fapte s i reguli existente. tile s Faptele sunt arma tii despre proprieta i rela tiile ti. existente ntre entita <ipoteza 1> s Regulile sunt arma tii de de tipul "Daca i ...s i <ipoteza n> atunci <concluzie>." logice sunt de obicei de forma ntrebarile programarii
<arma "Este adevarat ca tie 1> s i . . . <arma tie n>?", sau "Pentru ce valori ale necunoscutelor X1 , . . . , Xm este <arma adevarat ca tie 1> s i . . . s i <arma tie n>?"

Marin

Programare logica

Exemple de fapte, reguli, s i ntrebari


FAPTE n limbaj natural (lb. romna) Coco este papagal. Mihai o iube ste pe Maria Cubul cade de pe raft pe podea

n P ROLOG papagal(coco). iubeste(mihai,maria). cade(cub,raft, podea).

R EGULI n limbaj natural (lb. romna) n P ROLOG X este bun s Daca i X cunoa ste pe iubeste(X , Y ): atunci X o Y s i Y este frumoasa bun(X ), cunoaste(X , Y ), iube ste pe Y . frumoasa(Y ). Orice papagal este muritor. muritor(X ):-papagal(X).
I NTREB ARI n limbaj natural (lb. romna) n P ROLOG Este Coco papagal? ?-papagal(coco). Cine este muritor? ?-muritor(X).

Marin

Programare logica

De la limbaj natural la Prolog


a n acest curs vom pune accent pe traducerea corecta cuno stin telor dintr-un limbaj natural n limbajul Prolog. Adesea, vom reformula mai nti arma tiile din limbajul natural, pentru a le traduce mai u sor n P ROLOG. Exemplu n limbaj natural: X este student s Studen tii silitori au note bune. Daca i X este silitor atunci X are note bune X are note bune daca X este student s i X este silitor. n limbaj articial (P ROLOG): note(X , bune):-student(X ), silitor(X ).
: n P ROLOG , :- este daca" iar virgula dintre ipoteze R EMARC A (,) este si".
Marin Programare logica

logice Alte caracteristici ale programarii

n Programarea consta
a cuno scrierea corecta stin telor ca reguli s i fapte. a ntrebarilor. formularea corecta

Rezolvarea unei probleme se face punnd ntrebari


...?" "Este adevarat ca "Pentru ce valori ale necunoscutelor ... are loc ...?"

stie n general, programatorul nu trebuie sa cum se aa raspunsul la ntrebare. Gasirea raspunsurilor cade n sarcina interpretorului Prolog. compara Tema: ti acest stil de programare cu alte stiluri de programare: imperativ (C), orientat obiect(C++), func tional (Lisp), etc.

Marin

Programare logica

Programarea logica
Istoric

ca o formula logica Kowalski (anii 70) observa S1 . . . Sn S poate avea 2 semnica tii: Daca S1 s semnica tie logica: i . . . s i Sn sunt ecare adevarate a. atunci s i S este adevarat de forma "S daca S1 s semnica tie procedurala i . . . s i Sn " care astfel: pentru a aa daca procedura S este poate interpretata a trebuiesc executate recursiv procedurile S1 , . . . , Sn adevarat sunt adevarate. pentru a determina daca n P ROLOG, formula devine o regula S :-S1 , . . . , Sn . cu antetul (sau capul) regulii S , s i corpul S1 , . . . , Sn .
Marin Programare logica

Programarea logica
Istoric (continuare)

Universitatea din Marsilia (Colmerauer, anii 70): apare limbajul P ROLOG("Programmation et Logique".) P ROLOG s-a impus ca cel mai important limbaj de programare logica
(interpretoare & compilatoare) numeroase implementari

Marin

Programare logica

Rezolvarea de probleme cu P ROLOG


fapte despre obiecte s Se declara i rela tiile dintre ele.

Marin

Programare logica

Rezolvarea de probleme cu P ROLOG


fapte despre obiecte s Se declara i rela tiile dintre ele. Se denesc reguli despre obiecte s i rela tiile lor.

Marin

Programare logica

Rezolvarea de probleme cu P ROLOG


fapte despre obiecte s Se declara i rela tiile dintre ele. Se denesc reguli despre obiecte s i rela tiile lor. despre obiecte s Se pun ntrebari i rela tiile dintre ele.

Marin

Programare logica

Rezolvarea de probleme cu P ROLOG


fapte despre obiecte s Se declara i rela tiile dintre ele. Se denesc reguli despre obiecte s i rela tiile lor. despre obiecte s Se pun ntrebari i rela tiile dintre ele. Programarea n P ROLOG este o conversa tie cu interpretorul de P ROLOG. Rezolvarea de probleme n acest fel necesita logice: modelarea problemei folosind no tiunile programarii fapte. reguli. ntrebari. Program = fapte + reguli .
de cuno baza stin te

Marin

Programare logica

Fapte
Enun tarea unui fapt n P ROLOG predicat (obiect1 , . . . , obiectn ).
argumente

De exemplu are(andrei , carte).


mica. Numele rela tiilor (predicatelor) ncep cu litera P ROLOG folose ste mai ales nota tia prex (dar sunt si excep tii). Un fapt se ncheie cu . (punct).

s Programatorul alege numele predicatelor s i trebuie sa tie cum le interpreteaza.


ca Andrei are o carte. De ex., are(andrei , carte). nseamna

xeze numarul Programatorul trebuie sa de argumente al ecarui predicat. De exemplu, are este predicat binar. un predicat binar. Nota tie: are/2 indica
Marin Programare logica

Exemple de fapte
Aurul este pre tios. pretios(aur). Ioana este femeie. femeie(ioana). Mariei. Ion este tatal tata(ion, maria). femeie(ioana). Andrei are o carte. are(carte, andrei). Observa tii stabileasca n Programatorul trebuie sa telesul numelor de obiecte s i predicate folosite n scrierea faptelor. X are Y, s De exemplu: are(X,Y) nseamna i nu Y are X. nseamna Ordinea argumentelor conteaza!
Marin Programare logica

ntrebari
Exemplu de ntrebare n P ROLOG ?- are(andrei, carte). (Are Andrei o carte?)

Marin

Programare logica

ntrebari
Exemplu de ntrebare n P ROLOG ?- are(andrei, carte). (Are Andrei o carte?) n baza de cuno P ROLOG cauta stin te fapte care se cu ntrebarea. potrivesc (se unica)

Marin

Programare logica

ntrebari
Exemplu de ntrebare n P ROLOG ?- are(andrei, carte). (Are Andrei o carte?) n baza de cuno P ROLOG cauta stin te fapte care se cu ntrebarea. potrivesc (se unica) Raspunsul este true daca
predicatul este acela si argumentele sunt acelea si

Marin

Programare logica

ntrebari
Exemplu de ntrebare n P ROLOG ?- are(andrei, carte). (Are Andrei o carte?) n baza de cuno P ROLOG cauta stin te fapte care se cu ntrebarea. potrivesc (se unica) Raspunsul este true daca
predicatul este acela si argumentele sunt acelea si

Altfel, raspunsul este false

Marin

Programare logica

ntrebari
Exemplu de ntrebare n P ROLOG ?- are(andrei, carte). (Are Andrei o carte?) n baza de cuno P ROLOG cauta stin te fapte care se cu ntrebarea. potrivesc (se unica) Raspunsul este true daca
predicatul este acela si argumentele sunt acelea si

Altfel, raspunsul este false


adevarat. Numai ce este n baza de cuno stin te se considera

Marin

Programare logica

ntrebari
Exemplu de ntrebare n P ROLOG ?- are(andrei, carte). (Are Andrei o carte?) n baza de cuno P ROLOG cauta stin te fapte care se cu ntrebarea. potrivesc (se unica) Raspunsul este true daca
predicatul este acela si argumentele sunt acelea si

Altfel, raspunsul este false


adevarat. Numai ce este n baza de cuno stin te se considera false nu este acelasi lucru cu fals!
mai degraba nu s false nseamna tiu.

Marin

Programare logica

Variabile
= nlocuitor al unui obiect care satisface o rela Variabila tie. Exemplu de ntrebare cu variabila ?- place(ion, X). astfel: se interpreteaza
Care sunt obiectele X care i plac lui Ion?

sa determine valorile lui X pentru care P ROLOG urmeaza ntrebarea este true. Conven tie: n P ROLOG variabilele ncep cu LITERE MARI. poate n P ROLOG o variabila
variabila are un obiect ca valoare instan tiata: nca nu se s neinstan tiata: tie o valoare pentru variabila.

Marin

Programare logica

Exemplu de ntrebare cu variabile

baza de cuno Se considera stin te cu urmatoarele fapte:


place(ion,maria). place(ion,ori). place(paul,maria).

La ntrebarea
?-place(ion, X).

P ROLOG raspunde
X = ori

s i va a stepa instruc tiuni.

Marin

Programare logica

Calculul raspunsului n P ROLOG


n baza de cuno P ROLOG cauta stin te un fapt ce se potrive ste cu ntrebarea ste o potrivire, aceasta este marcata cnd se gase utilizatorul apasa Enter, cautarea daca se ncheie utilizatorul apasa ";" s o daca i apoi Enter, P ROLOG cauta potrivire, ncepnd cu ultimul loc marcat, s noua i cu variabilele din ntrebare neinstan tiate. n exemplul de mai sus, apasnd ";" urmat de Enter va raspund determina P ROLOG sa a: X = maria . false se Cnd nu mai sunt n baza de cuno stin te fapte ce sa P ROLOG raspunde potriveasca, false

Marin

Programare logica

mai complexe ntrebari


Conjunc tii

programul urmator: Se considera


place(maria, mancare). place(maria, vin). place(ion, vin). place(ion, maria).

s i ntrebarea
?- place(ion, maria), place(maria, ion).

Marin

Programare logica

mai complexe ntrebari


Conjunc tii

programul urmator: Se considera


place(maria, mancare). place(maria, vin). place(ion, vin). place(ion, maria).

s i ntrebarea
?- place(ion, maria), place(maria, ion).

n general, o ntrebare
?- fapt1 , . . . , faptn .

se cite ste fapt1 si . . . si faptn ? n acest caz: i place lui Ion de Maria si i place Mariei de Ion?

Marin

Programare logica

mai complexe (continuare) ntrebari


Conjunc tii

de cuno Baza stin te: place(maria, mancare). place(maria, vin). place(ion, vin). place(ion, maria). ntrebare: ?- place(ion, maria), place(maria, ion). toate faptele din P ROLOG va raspunde false : cauta altul (toate trebuiesc satisfacute, ntrebare, unul dupa altfel interogarea va e sua, iar raspunsul va false).

Marin

Programare logica

mai complexe (continuare) ntrebari


Conjunc tii

de cuno Baza stin te: place(maria, mancare). place(maria, vin). place(ion, vin). place(ion, maria). ntrebare: ?- place(maria, X), place(ion, X).

Marin

Programare logica

mai complexe (continuare) ntrebari


Conjunc tii

de cuno Baza stin te: place(maria, mancare). place(maria, vin). place(ion, vin). place(ion, maria). ntrebare: ?- place(maria, X), place(ion, X). un obiect X care i place s ntrebarea este: Exista i lui Ion s i Mariei?

Marin

Programare logica

mai complexe (continuare) ntrebari


Conjunc tii

de cuno Baza stin te: place(maria, mancare). place(maria, vin). place(ion, vin). place(ion, maria). ntrebare: ?- place(maria, X), place(ion, X). un obiect X care i place s ntrebarea este: Exista i lui Ion s i Mariei? sa satisfaca primul obiectiv (prima parte P ROLOG ncearca reu a ntrebarii); daca se ste, pune un marcaj pe el s i apoi sa satisfaca al doilea obiectiv, plasnd un marcaj ncearca n caz de succes.
Marin Programare logica

Conjunc tii s i backracking (revenire)

?- place(maria, X), place(ion, X).

place(maria, mancare). place(maria, vin). place(ion, vin). place(ion, maria).

Marin

Programare logica

Conjunc tii s i backracking (revenire)

?- place(maria, X), place(ion, X).

X= mancare

place(maria, mancare). place(maria, vin). place(ion, vin). place(ion, maria).

Marin

Programare logica

Conjunc tii s i backracking (revenire)

?- place(maria, X), place(ion, X).

X
X= mancare place(maria, mancare). place(maria, vin). place(ion, vin). place(ion, maria).

Marin

Programare logica

Conjunc tii s i backracking (revenire)

?- place(maria, X), place(ion, X).

X
X= mancare place(maria, mancare). place(maria, vin). place(ion, vin). place(ion, maria).

Marin

Programare logica

Conjunc tii s i backracking (revenire)

?- place(maria, X), place(ion, X).

X= mancare

place(maria, mancare). place(maria, vin). place(ion, vin). place(ion, maria).

Marin

Programare logica

Conjunc tii s i backracking (revenire)

?- place(maria, X), place(ion, X).

X= mancare

place(maria, mancare). place(maria, vin). place(ion, vin). place(ion, maria).

Marin

Programare logica

Conjunc tii s i backracking (revenire)

?- place(maria, X), place(ion, X).

X= vin

place(maria, mancare). place(maria, vin). place(ion, vin). place(ion, maria).

Marin

Programare logica

Conjunc tii s i backracking (revenire)

?- place(maria, X), place(ion, X).

X
X= vin place(maria, mancare). place(maria, vin). place(ion, vin). place(ion, maria).

Marin

Programare logica

Conjunc tii s i backracking (revenire)

?- place(maria, X), place(ion, X).

X
X= vin place(maria, mancare). place(maria, vin). place(ion, vin). place(ion, maria).

Marin

Programare logica

Conjunc tii s i backracking (revenire)

?- place(maria, X), place(ion, X).

s ye
X= vin place(maria, mancare). place(maria, vin). place(ion, vin). place(ion, maria).

X = vin

Marin

Programare logica

Conjunc tii s i backracking (revenire)

?- place(maria, X), place(ion, X).

X= vin

place(maria, mancare). place(maria, vin). place(ion, vin). place(ion, maria).

X = vin

Marin

Programare logica

Conjunc tii s i backracking (revenire)

?- place(maria, X), place(ion, X).

X X = vin

place(maria, mancare). place(maria, vin). place(ion, vin). place(ion, maria).

Marin

Programare logica

Conjunc tii s i backracking (revenire)

?- place(maria, X), place(ion, X).

X X = vin

place(maria, mancare). place(maria, vin). place(ion, vin). place(ion, maria).

Marin

Programare logica

Reguli
"Lui Ion i plac to Cum putem programa faptul ca ti oamenii"?
place(ion,alex). place(ion, bogdan). place(ion, clara). place(ion, dan). ...

Ar trebui enumerate toate persoanele n baza de cuno stin te imposibil!

Marin

Programare logica

Reguli
"Lui Ion i plac to Cum putem programa faptul ca ti oamenii"?
place(ion,alex). place(ion, bogdan). place(ion, clara). place(ion, dan). ...

Ar trebui enumerate toate persoanele n baza de cuno stin te imposibil! Folosim o variabila: place(ion, X). "Lui Ion i place orice obiect X ." nseamna

Marin

Programare logica

Reguli
"Lui Ion i plac to Cum putem programa faptul ca ti oamenii"?
place(ion,alex). place(ion, bogdan). place(ion, clara). place(ion, dan). ...

Ar trebui enumerate toate persoanele n baza de cuno stin te imposibil! Folosim o variabila: place(ion, X). "Lui Ion i place orice obiect X ." nseamna lui Ion i plac to Mai trebuie precizat ca ti X care sunt persoane.

Marin

Programare logica

Reguli
"Lui Ion i plac to Cum putem programa faptul ca ti oamenii"?
place(ion,alex). place(ion, bogdan). place(ion, clara). place(ion, dan). ...

Ar trebui enumerate toate persoanele n baza de cuno stin te imposibil! Folosim o variabila: place(ion, X). "Lui Ion i place orice obiect X ." nseamna lui Ion i plac to Mai trebuie precizat ca ti X care sunt persoane. Regulile sunt un mod de a preciza cum unele fapte depind de alte fapte.
Marin Programare logica

Reguli ca deni tii


Regulile pot folosite pentru a specica deni tii.

Marin

Programare logica

Reguli ca deni tii


Regulile pot folosite pentru a specica deni tii. Exemple:

Marin

Programare logica

Reguli ca deni tii


Regulile pot folosite pentru a specica deni tii. Exemple: X este om." "X i place lui Ion daca

Marin

Programare logica

Reguli ca deni tii


Regulile pot folosite pentru a specica deni tii. Exemple: X este om." "X i place lui Ion daca daca X este animal s "X este pasare i X zboara."

Marin

Programare logica

Reguli ca deni tii


Regulile pot folosite pentru a specica deni tii. Exemple: X este om." "X i place lui Ion daca daca X este animal s "X este pasare i X zboara." X este femeie s "X este sora lui Y daca i X s i Y au aceia si ti." parin

Marin

Programare logica

Reguli ca deni tii


Regulile pot folosite pentru a specica deni tii. Exemple: X este om." "X i place lui Ion daca daca X este animal s "X este pasare i X zboara." X este femeie s "X este sora lui Y daca i X s i Y au aceia si ti." parin cu ATEN TIE : No tiunea de deni tie de mai sus nu este identica no tiunea de deni tie din logica! ceva are loc daca si numai daca O deni tie spune ca altceva (corpul deni tiei) are loc. spune ca un fapt A este adevarat altceva O regula daca faptul A ar putea adevarat este adevarat. nsa s i n alte situa tii.
X este femeie. X este om daca X este barbat. X este om daca
Marin Programare logica

Reguli n P ROLOG

Regulile n P ROLOG au un cap s i un corp. Corpul regulii descrie condi tiile ce trebuiesc satisfacute aceste pentru a satisface capul. n program area logica, condi tii se mai numesc s i obiective. Exemplu place(ion, X) :place(X,vin). place(ion, X) :femeie(X), place(X, dans). ATEN TIE ! Scopul unei variabile este regula n care aceasta apare (reguli diferite nu au variabile n comun).

Marin

Programare logica

Reguli n P ROLOG

Sintaxa unei reguli


cap corp

predicat (arg1 , . . . , argn ) :- fapt1 , . . . , faptm .

delimitatori de fapte ( si) (daca) delimitator de regula

Marin

Programare logica

Exemplu
Familie regala

Predicate folosite: male(X ): "X este barbat." female(Y ): "Y este femeie." tii lui X sunt Y s parents(X,Y,Z): "parin i Z ."

Marin

Programare logica

Exemplu
Familie regala

Predicate folosite: male(X ): "X este barbat." female(Y ): "Y este femeie." tii lui X sunt Y s parents(X,Y,Z): "parin i Z ." Baza de cuno stin te: male(albert). male(edward). female(alice). female(victoria). parents(edward,victoria,albert). parents(alice,victoria,albert).

Marin

Programare logica

Exemplu
Familie regala

Predicate folosite: male(X ): "X este barbat." female(Y ): "Y este femeie." tii lui X sunt Y s parents(X,Y,Z): "parin i Z ." Baza de cuno stin te: male(albert). male(edward). female(alice). female(victoria). parents(edward,victoria,albert). parents(alice,victoria,albert). Cum poate denit predicatul
sister(X , Y ): "X este sora lui Y ."?

Marin

Programare logica

Exemplu (continuare)
Familie regala

Specicarea predicatului sister/2: sister(X,Y) :female(X), parents(X, M, F), parents(Y, M, F). Exemple de ntrebari ?- sister(alice, edward). ?- sister(alice, X). ?- sister(X, edward).

Marin

Programare logica

despre surori ntrebari


Regula: sister(X,Y) :female(X), parents(X,M,F), parents(Y,M,F).

ntrebare: sister(alice,edward).

Marin

Programare logica

despre surori ntrebari


Regula: sister(X,Y) :female(X), parents(X,M,F), parents(Y,M,F).

ntrebare: sister(alice,edward). ntrebarea (obiectivul) se potrive ste cu capul regulei, daca X cu alice s se instan tiaza i Y cu edward.

Marin

Programare logica

despre surori ntrebari


Regula: sister(X,Y) :female(X), parents(X,M,F), parents(Y,M,F).

ntrebare: sister(alice,edward). ntrebarea (obiectivul) se potrive ste cu capul regulei, daca X cu alice s se instan tiaza i Y cu edward. Instan ta corpului devine noua ntrebare (obiectiv): female(alice), parents(alice,M,F), parents(edward,M,F).

Marin

Programare logica

Este Alice sora lui Edward?

sister(alice,edward) male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F). (1) (2) (3) (4) (5)

Marin

Programare logica

Este Alice sora lui Edward?

sister(alice,edward) male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F). (1) (2) (3) (4) (5)

Marin

Programare logica

Este Alice sora lui Edward?

sister(alice,edward) male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F). (1) (2) (3) (4) (5)

Marin

Programare logica

Este Alice sora lui Edward?

sister(alice,edward) male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X0,Y0):female(X0), parents(X0,M0,F0), parents(Y0,M0,F0). (1) (2) (3) (4) (5)

Marin

Programare logica

Este Alice sora lui Edward?

male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X0,Y0):female(X0), parents(X0,M0,F0), parents(Y0,M0,F0).

(1) (2) (3) (4) (5)

sister(alice,edward) X0=alice, Y0=edward

Marin

Programare logica

Este Alice sora lui Edward?

male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X0,Y0):female(X0), parents(X0,M0,F0), parents(Y0,M0,F0).

(1) (2) (3) (4) (5)

7 sister(alice,edward) X0=alice, Y0=edward female(alice), parents(alice,M0,F0), parents(edward,M0,F0).

Marin

Programare logica

Este Alice sora lui Edward?

male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F).

(1) (2) (3) (4) (5)

7 sister(alice,edward) X0=alice, Y0=edward female(alice), parents(alice,M0,F0), parents(edward,M0,F0).

Marin

Programare logica

Este Alice sora lui Edward?

male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F).

(1) (2) (3) (4) (5)

7 sister(alice,edward) X0=alice, Y0=edward female(alice), parents(alice,M0,F0), parents(edward,M0,F0).

Marin

Programare logica

Este Alice sora lui Edward?

male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F).

(1) (2) (3) (4) (5)

7 sister(alice,edward) X0=alice, Y0=edward female(alice), parents(alice,M0,F0), parents(edward,M0,F0).

Marin

Programare logica

Este Alice sora lui Edward?

male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F).

(1) (2) (3) (4) (5)

7 sister(alice,edward) X0=alice, Y0=edward 3 female(alice), parents(alice,M0,F0), parents(edward,M0,F0).

parents(alice,M0,F0), parents(edward,M0,F0).

Marin

Programare logica

Este Alice sora lui Edward?

male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F).

(1) (2) (3) (4) (5)

7 sister(alice,edward) X0=alice, Y0=edward 3 female(alice), parents(alice,M0,F0), parents(edward,M0,F0).

parents(alice,M0,F0), parents(edward,M0,F0).

Marin

Programare logica

Este Alice sora lui Edward?

male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F).

(1) (2) (3) (4) (5)

7 sister(alice,edward) X0=alice, Y0=edward 3 female(alice), parents(alice,M0,F0), parents(edward,M0,F0).

parents(alice,M0,F0), parents(edward,M0,F0).

Marin

Programare logica

Este Alice sora lui Edward?

male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F).

(1) (2) (3) (4) (5)

7 sister(alice,edward) X0=alice, Y0=edward 3 female(alice), parents(alice,M0,F0), parents(edward,M0,F0).

parents(alice,M0,F0), parents(edward,M0,F0). M0=victoria, F0=albert

Marin

Programare logica

Este Alice sora lui Edward?

male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F).

(1) (2) (3) (4) (5)

7 sister(alice,edward) X0=alice, Y0=edward 3 female(alice), parents(alice,M0,F0), parents(edward,M0,F0).

6 parents(alice,M0,F0), parents(edward,M0,F0). M0=victoria, F0=albert parents(edward,victoria,albert).

Marin

Programare logica

Este Alice sora lui Edward?

male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F).

(1) (2) (3) (4) (5)

7 sister(alice,edward) X0=alice, Y0=edward 3 female(alice), parents(alice,M0,F0), parents(edward,M0,F0).

6 parents(alice,M0,F0), parents(edward,M0,F0). M0=victoria, F0=albert parents(edward,victoria,albert).

Marin

Programare logica

Este Alice sora lui Edward?

male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F).

(1) (2) (3) (4) (5)

7 sister(alice,edward) X0=alice, Y0=edward 3 female(alice), parents(alice,M0,F0), parents(edward,M0,F0).

6 parents(alice,M0,F0), parents(edward,M0,F0). M0=victoria, F0=albert 5 parents(edward,victoria,albert).

Marin

Programare logica

Este Alice sora lui Edward?

male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F).

(1) (2) (3) (4) (5)

7 sister(alice,edward) X0=alice, Y0=edward 3 female(alice), parents(alice,M0,F0), parents(edward,M0,F0).

6 parents(alice,M0,F0), parents(edward,M0,F0). M0=victoria, F0=albert 5 parents(edward,victoria,albert).

Marin

Programare logica

Sora cui este Alice?


sister(alice,X) male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F). (1) (2) (3) (4) (5)

Marin

Programare logica

Sora cui este Alice?


sister(alice,X) male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F). (1) (2) (3) (4) (5)

Marin

Programare logica

Sora cui este Alice?


sister(alice,X) male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F). (1) (2) (3) (4) (5)

Marin

Programare logica

Sora cui este Alice?


sister(alice,X) male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X0,Y0):female(X0), parents(X0,M0,F0), parents(Y0,M0,F0). (1) (2) (3) (4) (5)

Marin

Programare logica

Sora cui este Alice?


sister(alice,X) X0=alice, Y0=X male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X0,Y0):female(X0), parents(X0,M0,F0), parents(Y0,M0,F0). (1) (2) (3) (4) (5)

Marin

Programare logica

Sora cui este Alice?


7 sister(alice,X) X0=alice, Y0=X male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X0,Y0):female(X0), parents(X0,M0,F0), parents(Y0,M0,F0). (1) (2) (3) (4) (5) female(alice), parents(alice,M0,F0), parents(X,M0,F0).

Marin

Programare logica

Sora cui este Alice?


7 sister(alice,X) X0=alice, Y0=X male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F). (1) (2) (3) (4) (5) female(alice), parents(alice,M0,F0), parents(X,M0,F0).

Marin

Programare logica

Sora cui este Alice?


7 sister(alice,X) X0=alice, Y0=X male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F). (1) (2) (3) (4) (5) female(alice), parents(alice,M0,F0), parents(X,M0,F0).

Marin

Programare logica

Sora cui este Alice?


7 sister(alice,X) X0=alice, Y0=X male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F). (1) (2) (3) (4) (5) female(alice), parents(alice,M0,F0), parents(X,M0,F0).

Marin

Programare logica

Sora cui este Alice?


7 sister(alice,X) X0=alice, Y0=X male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F). (1) (2) (3) (4) (5) 3 female(alice), parents(alice,M0,F0), parents(X,M0,F0).

parents(alice,M0,F0), parents(X,M0,F0).

Marin

Programare logica

Sora cui este Alice?


7 sister(alice,X) X0=alice, Y0=X male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F). (1) (2) (3) (4) (5) 3 female(alice), parents(alice,M0,F0), parents(X,M0,F0).

parents(alice,M0,F0), parents(X,M0,F0).

Marin

Programare logica

Sora cui este Alice?


7 sister(alice,X) X0=alice, Y0=X male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F). (1) (2) (3) (4) (5) 3 female(alice), parents(alice,M0,F0), parents(X,M0,F0).

parents(alice,M0,F0), parents(X,M0,F0).

Marin

Programare logica

Sora cui este Alice?


7 sister(alice,X) X0=alice, Y0=X male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F). (1) (2) (3) (4) (5) 3 female(alice), parents(alice,M0,F0), parents(X,M0,F0).

parents(alice,M0,F0), parents(X,M0,F0). M0=victoria F0=albert

Marin

Programare logica

Sora cui este Alice?


7 sister(alice,X) X0=alice, Y0=X male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F). (1) (2) (3) (4) (5) 3 female(alice), parents(alice,M0,F0), parents(X,M0,F0).

6 parents(alice,M0,F0), parents(X,M0,F0). M0=victoria F0=albert parents(X,victoria,albert).

Marin

Programare logica

Sora cui este Alice?


7 sister(alice,X) X0=alice, Y0=X male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F). (1) (2) (3) (4) (5) 3 female(alice), parents(alice,M0,F0), parents(X,M0,F0).

6 parents(alice,M0,F0), parents(X,M0,F0). M0=victoria F0=albert parents(X,victoria,albert).

Marin

Programare logica

Sora cui este Alice?


7 sister(alice,X) X0=alice, Y0=X male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F). (1) (2) (3) (4) (5) 3 female(alice), parents(alice,M0,F0), parents(X,M0,F0).

6 parents(alice,M0,F0), parents(X,M0,F0). M0=victoria F0=albert 5 parents(X,victoria,albert). X=edward

Marin

Programare logica

Sora cui este Alice?


7 sister(alice,X) X0=alice, Y0=X male(albert). male(edward). female(alice). female(victoria). parents(edward, victoria, albert). (6) parents(alice, victoria, albert). (7) sister(X,Y):female(X), parents(X,M,F), parents(Y,M,F). (1) (2) (3) (4) (5) 3 female(alice), parents(alice,M0,F0), parents(X,M0,F0).

6 parents(alice,M0,F0), parents(X,M0,F0). M0=victoria F0=albert 5 parents(X,victoria,albert). X=edward

Raspuns: X = edward.

Marin

Programare logica

Exerci tiu: ho ti
Predicate folosite: thief(X ): "X este ho t." likes(X , Y ): "Lui X i place Y ." may_steal(X , Y ): "X ar putea fura Y ." Stim ca:
1 2 3 4 5

X este ho X ar putea fura Y daca ts i lui X i place Y . John e ho t. Lui Mary i place mncarea. Lui Mary i place vinul. lui X i place vinul. Lui John i place X daca

ntrebare: Ce ar putea fura John?

Marin

Programare logica

Exerci tiu: ho ti (continuare)


Programarea problemei n P ROLOG

Baza de cuno stin te: thief(john). likes(mary, food). likes(mary, wine). likes(john, X ) :- likes(X , wine). may_steal (X , Y ):thief(X ), likes(X , Y ). ntrebare: ?- may_steal(john,X).

Marin

Programare logica

Concluzie

n acest curs au fost prezentate principalele no tiuni de programare logica fapte, conjunc tii de fapte, variabile logice reguli exemple care ilustreaza
n P ROLOG Cum se programeaza Cum raspunde P ROLOG la ntrebarile puse de utilizator.

Marin

Programare logica

Bibliograe, exerci tii

Cursul presupune familiarizarea cu programarea n SWI P ROLOG. Toate detaliile despre SWIProlog pot gasite la http://www.swi-prolog.org. Instala ti SWI-Prolog s i ncerca ti exemplele prezentate. Bibliograe: Capitolul 1 + sec tiunea de exerci tii din [Clocksin and Mellish, 2003].

Marin

Programare logica

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