Documente Academic
Documente Profesional
Documente Cultură
Plia 3 14
Plia 3 14
Obiecte elementare
Exista doua tipuri de constante: atomi si numere.
Atomii sunt constante simbolice care incep, de obicei, cu o
litera si pot contine litere, cifre si caracterul _.
Numerele pot fi intregi sau reale;
Atomii pot desemna:
obiecte constante care sunt argumentele predicatelor, de
exemplu atomii mihai i maria in faptul
iubeste(mihai, maria);
predicate Prolog, fie cele definite de utilizator, fie cele
predefinite in sistem; de exemplu atomul iubeste in faptul
iubeste(mihai, maria);
atomi speciali, de exemplu atomii :- i ? , ;
Constante
Constants can either be:
Numbers:
integers are the usual form (e.g. 1, 0, -1, etc), but
floating-point numbers can also be used (e.g. 3.0E7)
Symbolic (non-numeric) constants:
always start with a lower case alphabetic character and
contain any mixture of letters, digits, and underscores
(but no spaces, punctuation, or an initial capital).
e.g. abc, big_long_constant, x4_3t).
String constants:
are anything between single quotes e.g. Like this.
Structuri
O structura Prolog este un obiect ce desemneaza o colecie
de obiecte corelate logic, care formeaz componentele
structurii.
Exemple:
poseda(mihai, carte(prolog, clocksin, 1981)).
unde carte(prolog, clocksin, 1981) este o structur cu numele
carte si cu trei componente: prolog, clocksin si 1981.
Se admit si structuri imbricate:
poseda(mihai, carte (prolog, autori(clocksin, mellish),
1981)).
Structuri
n Prolog, o structura se defineste prin specificarea:
-numelui structurii ( functorul structurii);
-elementelor structurii (compon.structurii).
Un arbore binar poate fi reprezentat in Prolog tot
printro structura, de exemplu:
arb(barbu, arb(ada, vid, vid), vid).
reprezinta un arbore binar cu cheia din radacina
barbu, cu subarborele drept vid si cu subarborele
sting format dintrun singur nod cu cheia ada.
Structuri
Sintaxa structurilor este aceeasi cu cea a faptelor
Prolog. Un predicat Prolog poate fi vzut ca o
structura a crui functor este numele predicatului, iar
argumentele acestuia reprezint componentele
structurii.
Considerarea predicatelor Prolog ca structuri
prezint un interes deosebit; att datele ct i
programele n Prolog au aceeai forma, ceea ce
faciliteaza tratarea uniform si sinteza dinamic de
programe.
Liste
O list este o structur de date ce reprezint o
secven ordonat de zero sau mai multe elemente.
O list poate fi definit recursiv astfel:
1. lista vid (lista cu 0 elemente) este o list
2. o list este o structur cu dou componente:
primul element din list (capul listei) i restul
listei (lista format din urmatoarele elemente
din lista).
Liste
Liste
Lista vid este reprezentata prin atomul special [ ].
Sfritul unei liste este de obicei reprezentat ca
list vid.
[a] lista conine numai un element
[a, b, c] o list cu trei elemente
Aceast sintax a listelor este general i valabil n
orice implementare Prolog.
Liste
O operaie frecvent asupra listelor este obinerea
primului element dintro list i a restului listei , deci
a celor dou componente ale structurii de list.
Aceasta operaie este realizat n Prolog de
operatorul de scindare a listelor | scris sub
urmtoarea form:
[Prim | Rest]
Dac lista conine exact un element, Rest va
reprezenta lista vid. ncercarea de identificare a
structurii [Prim | Rest] cu o list vid duce la eec.
Structuri echivalente
[a, b, c] =
[a | [b, c] ] =
[a, b | [c] ] =
[a, b, c | [ ] ] =
[a | [b | [c] ] ] =
[a | [b | [c | [ ] ] ] ].
pred([1, 2, 3, 4]).
pred([coco, sta, pe, [masa, alba]]).
se pot pune urmtoarele ntrebri obinnd rspunsurile
specificate:
?- pred([Prim | Rest]).
Prim = 1, Rest = [2, 3, 4];
Prim = coco, Rest = [sta, pe, [masa, alba]];
No
?- pred([ _, _ , _ , [ _ | Rest]])
Rest = [alba]
Operatori
Operatorii relaionali sunt predicate predefinite
infixate. Un astfel de operator este
operatorul de egalitate =
Predicatul (operatorul) de egalitate functioneaz
ca i cum ar fi definit prin urmtorul fapt:
X = X.
iar incercarea de a satisface un scop de tipul
X = Y se face prin incercarea de a unifica X cu Y
Operatorul de egalitate
Atomii si numerele sunt intodteauna egali cu ei
insusi:
1001=1011 % esueaza
ana=ana
% este satisfacut
Doua structuri sunt egale, daca au acelasi functor,
acelasi numar de componente si componentele
ale structurilor coincid
Operatori
Operatorul de inegalitate <>(\=) se definete ca un
predicat opus celui de egalitate.
Scopul X <> Y reuete dac scopul X = Y nu este
satisfcut i eueaz dac X = Y reuete.
n plus, exist predicatele relaionale de inegalitate
definite prin operatorii infixai
>, <, =<, >=, cu semnificaii evidente.
- constants;
- databases.
Nu toate seciuni sunt obligatorii: (domains, goal,
constants, databases-opional).
Seciunea goal
Dac sectiunea goal apare n program, la rulare
programul execut acest goal, caut prima soluie i
nu afieaz variabilele interne de lucru !!!
(goal declarat).
Cnd apare n program, n general, seciunea goal este
dupa seciunile predicates si clauses.
Un program Prolog poate conine doar o singura
sectiune goal !!!!
Sectiunea goal
Sectiunea goal conine o clauz sau un ir de clauze
conectate logic (cu and si/sau or): goal complex
(compus din mai multe subgoal-uri legate logic).
Acest goal poate fi un predicat cu sau far argumente,
iar argumentele, dac apar, pot fi variabile (variabile
anonime sau nu) sau obiecte.
Acest goal se termin cu punct.
clauses
star(Soare).
planet(Pamint).
planet(Mars).
revolve(Pamint,Soare).
revolve(Luna,Pamint).
revolve(Fobos,Mars).
revolve(Deimos,Mars).
satellite(X,Y):-planet(Y),
revolve(X,Y).
Modificam scopul
Scopul intern
goal
write(Satelitele Mars:),
satellite(X,Mars),
write( ,X), fail.
Raspunsul va fi:
Satelitele Mars: Fobos Deimos
Va fi obtinut raspunsul:
X=Fobos
X=Deimos
2 Solutions
Goal
Scopul este demonstrat dac toate subscopurile
sunt demonstrate.
Cnd un subobiectiv eueaz, Prolog se ntoarce la
subobiectivele anterioare i continu cu alte
valori
ale variabilelor.
Aceast tehnica este denumit backtracking.
Seciunea constants
permite declararea unor constante (constante simbolice).
Seciunea poate sa apar oriunde in program, cu condiia s
fie declarat constanta nainte de utilizarea ei. Constanta e
vizibil in toate clauzele, dar valoarea constantei nu se poate
modifica n timpul execuiei programului.
Forma generala:
constants
nume _constanta=valoare
Exemple:
Constants
P =3
G = 9,8
Computer = dell
Un program simplu
Se consider poarta I ca fiind construit prin
conectarea unei "pori I NU" cu un inversor. ntregul
circuit este definit de relaia:
poarta_si(Intrare1, Intrare2, Iesire)
pe baza relaiilor
poarta_si_nu(Intrare1, Intrare2, Iesire)
inversor(Intrare, Iesire).
n1).
Irez(alimentare,
n2).
tranzistor(n2,masa,
n1).
tranz(n2, masa,
n1).
tranz(n3, n4, n2).
tranz(n5, masa,
n4).
inversor(Intr, Ie) :tranz(Intr, masa,
Ie),
Intr2,
Un circuit logic poartpoarta_si_nu(Intr1,
I
Ie) :tranz(Intr1, X, Ie),
Concluzii
Concluzii
Prolog lucreaz cu aa numitele predicate logice. Pentru a
exprima un predicat logic se utilizeaz o sintax foarte
simpl, apropiata de limbajul natural.
Prolog se poate ajunge la soluii prin inferena logic
(deducie logic) pornind de la ceva cunoscut n prealabil.
Prolog incearc s deduc dac o ipotez este adevarat
prin interogarea unui set de informaii deja adevarate.
Concluzii
O alta caracteristica importanta 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.