Programarea cu constr angeri n Prolog [618105]
Programarea cu constr^ angeri ^ n Prolog
Boico Ion
2019
Rezumat
Programarea logic a cu constr^ angeri ^ mbin a programarea logic a s ,i programa-
rea cu constr^ angeri, s ,i anume stilul declarativ al program arii logice ^ mpreun a
cu ecient ,a satisfacerii constr^ angerilor. Acest referat are scopul de a prezenta
o introducere general a ^ n programarea logic a cu constr^ angeri, precum s ,i pre-
zentarea unor not ,iuni introductive despre Prolog s ,i programarea logic a cu
constr^ angeri (Constraint Logic Programming – CPL).
Lucrarea dat a este ^ mp art ,it a ^ n trei capitole:
Primul capitol cont ,ine not ,iuni introductive despre Prolog.
Al doilea capitol cont ,ine at^ at not ,iuni introductive despre programa-
rea logic a cu constr^ angeri, c^ at s ,i abordarea problemei satisfacerii con-
str^ angerilor.
Al treilea capitol cont ,ine concluziile obt ,inute ^ n urma analizei pro-
gram arii logice cu constr^ angeri (Constraint Logic Programming – CPL).
Cuprins
Introducere . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1 Limbajul Prolog 4
1.1 Entit at ,ile limbajului Prolog . . . . . . . . . . . . . . . . . . . 5
1.2 Sintaxa limbajului Prolog . . . . . . . . . . . . . . . . . . . . 8
1.3 Limbajul Prolog si logica cu predicate de ordinul I . . . . . . . 8
2 Programarea cu constr^ angeri 12
2.1 Satisfacerea constr^ angerilor . . . . . . . . . . . . . . . . . . . 13
2.2 Rezolvarea problemelor de satisfacere a constr^ angerilor . . . . 15
2.3 Utilizarea limbajului Prolog ca limbaj de programarea logic a
a constr^ angerilor . . . . . . . . . . . . . . . . . . . . . . . . . 16
3 Concluzii 18
1
Bibliograe 20
2
Introducere
Programarea logic a se bazeaz a pe principiile logicii formale. Cer-
cet arile ^ n domeniul logicii formale au fost init iate de Aristotel ^ n secolul al
IV-lea ^ .e.n. El a creat o oper a pre stiint ic a ^ n domeniul logicii, a elaborat
teoria rat iunii si formele ei, ^ nv at atura despre silogisme, a formulat legile lo-
gicii. Logica lui Aristotel, cunoscut a si sub denumirea de logic a tradit ional a,
este str^ ans legat a de limbajul natural. ^In secolul al XIX-lea a ap arut primul
limbaj formal al logicii { logica propozit ional a, iar put in mai t^ arziu un limbaj
mai avansat { logica predicatelor.
Leibniz G. W. (1646 – 1716) este considerat nu numai unul dintre
fondatorii analizei matematice, dar s ,i a informaticii s ,i logicii formale. ^In lo-
gic a el s – a ocupat de metodele ce permit descompunerea tuturor not ,iunilor
umane ^ n astfel de not ,iuni care ar constitui "alfabetul rat ,iunii umane", sco-
pul ind ^ mbinarea lor ^ n mod automat pentru a obt ,ine toate armat ,iile
adev arate. La baza proiectului s au a fost pus a Logica simbolic a sau cum
o numea el "Calculul care genereaz a rat ,ionamente". De ment ,ionat c a Pro-
log este unul dintre primele limbaje care a produs trecerea de la prelucrarea
numeric a la cea simbolic a.
^In limitele acestor formalisme, ideile promovate de J. Robinson, R.
Kowalski si alt ii, predominant din Marea Britanie, ^ n anii `60 ai secolului
trecut au pus bazele teoriei program arii logice.
3
Capitolul 1
Limbajul Prolog
La ^ nceputul anilor '70, Kowalski a formulat o astfel de formul a
logic a:
S1^S2^: : : S n!S
care are, ^ n logica cu predicate de ordinul ^ nt^ ai seminicat ,ia declarativ a con-
form c areia S1^S2^: : : S n!Simplic a S, adic a dac a S1s,iS2: : :s,iSn
sunt ecare adev arate atunci s ,iSeste adev arat, s ,i a propus o interpretare
procedural a asociat a. Conform acestei interpret ari, formula de mai sus poate
scris a sub forma:
Sdac a S1s,iS2: : :s,iSn
s,i poate executat a ca o procedur a a unui limbaj de programare recursiv,
unde Seste antentul procedurii s ,iS1; S 2; : : : S ncorpul acesteia. Deci, pe
l^ ang a interpretarea declarativ a, logic a, a unei astfel de formule, formula poate
interpretat a procedural astfel: pentru a executa Sse execut a S1; S2; : : : S n.
^In aceeas ,i perioad a, francezul A. Colmerauer, lingvist de speciali-
4
tate a elaborat prima versiune a limbajului de programare logic a Prolog. ^In
anul 1971 ^ n Marsilia a fost demonstrat primul interpretator al limbajului de
programare Prolog. Denumirea limbajului Prolog este format a din prexele
cuvintelor"PROgramare LOGic a".
La baza limbajului de programare logic a stau elementele logicii.
Procesul deducerii unei concluzii ^ n baza unor condit ii prealabile se nume ste
deduct ie logic a. ^In deduct ia logic a, mult imea predicatelor unei concluzii
se pun ^ n concordant a cu mult imea subiectelor altei concluzii. ^In procesul
deducerii, pe baza subiectului unei concluzii si a predicatului altei concluzii,
se formeaz a o concluzie nou a. ^In a sa fel, deduct ia logic a poate determinat a
si ca un proces de rat ionament. [1]
Prologul este mai adaptat pentru rezolvarea problemelor inteligent ei
articiale. ^Ins a, a-l considera unic pentru acest domeniu ar incorect. LISP-
ul este nu mai put in cunoscut ^ n domeniul inteligent ei articiale.
1.1 Entit at ,ile limbajului Prolog
Limbajul Prolog este un limbaj logic, descriptiv, care permite spe-
cicarea problemei de rezolvat ^ n termenii unor fapte cunoscute despre obiec-
tele universului problemei si a relat iilor existente^ ntre aceste obiecte. Execut ia
unui program Prolog const a ^ n deducerea implicat iilor acestor fapte si relat ii,
programul denind astfel o mult ime de consecint e ce reprezint a ^ nt elesul sau
semnicat ia declarativ a a programului.
Un program Prolog cont ine urm atoarele entit at i:
5
fapte despre obiecte si relat iile existente ^ ntre aceste obiecte;
Un fapt este un adev ar necondit ,ionat s ,i specic a o armat ,ie despre o
anumit a relat ,ie. Relat ,iile pot unare, binare, etc.
Forma general a este:
nume predicat ( arg 1; arg 2; : : : ; arg m):(m1)
Numele unui predicat este un identicator care ^ ncepe cu o liter a mic a.
Argumentele sunt constante. Faptul este urmat de un punct.
Exemplu:
Faptul plus(3;4;7):descrie relat ,ia "3 plus 4 este egal cu 7".
reguli despre obiecte si relat iile dintre ele, care permit deducerea (in-
ferarea) de noi fapte pe baza celor cunoscute;
Regulile sunt armat ,ii, adev arul c arora este determinat de c atre adev arul
mai multor factori. Regulile sunt nis ,te rat ,ionamente (deduct ,ii).
Forma general a a regulilor este:
nume predicat ( arg 1; arg 2; : : : ; arg m) :
nume predicat1 ( arg 11; arg 12; : : : ; arg 1m);
nume predicat2 ( arg 21; arg 22; : : : ; arg 2l);
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;
nume predicatK ( arg k1; arg k2; : : : ; arg kp):
Num arul argumentelor din paranteze poate s ,i nul. ^In acest caz pa-
rantezele se omit. Predicatele pot cont ,ine variabile.
^ ntreb ari, numite si scopuri , despre obiecte si relat iile dintre ele, la
care programul r aspunde pe baza faptelor si regulilor existente.
Dup a ce s – au declarat faptele s ,i regulile, poate declarat s ,i scopul.
6
Ceea ce se caut a se numes ,te ^ n Prolog goal (interogare, scop). Scopul
determin a dac a are loc o anumit a relat ,ie dintre obiecte.
Forma unui goalcoincide cu forma corpului unei reguli. Un goalpoate
exterior sau interior. ^In cazul c^ and goaleste exterior (se introduce ^ n
fereastra de dialog) se caut a toate solut ,iile, dac a el cont ,ine variabile.
Dac a nu cont ,ine variabile, atunci se caut a o singur a solut ,ie (prima).
^In cazul c^ and goaleste ^ n interiorul programului (declarat) se caut a o
singur a solut ,ie (prima).
^In procesul de c autare a solut ,iilor, Prolog ^ ncearc a s a unice predica-
tele ce trebuie demonstrate ( goal) cu un predicat declarat ca fapt sau
deductibil.
[5]Unicarea are loc atunci c^ and:
{predicatele au acelas ,i nume;
{obiectele unicate au acelas ,i nume;
{obiectele s ,i valoarea variabilelor legate sunt identice;
{valorile a dou a variabile sunt identice;
{variabilele ce nu sunt legate se leag a la valorile obiectelor care se
unic a;
{variabila anonim a nu ia valoare, se unic a cu orice;
{dac a dou a variabile sunt legate, atunci ^ ndat a ce una este concre-
tizat a (primes ,te valoare) cealalt a e legat a de aceeas ,i valoare.
Exemplu:
GOAL: are(persoanaX, carte).
1. R aspunsul este YES dac a:
{scopul este satisf acut de c atre baza de cunos ,tint ,e
7
2. Altfel r aspunsul este NO:
{acest scop nu exist a ^ n baza de cunos ,tint ,e
1.2 Sintaxa limbajului Prolog
Un program Prolog este format din fapte, reguli si ^ ntreb ari, acestea
ind construite pe baza predicatelor denite de utilizator sau predenite. ^In
orice sistem Prolog exist a o mult ime de predicate predenite, unele dintre
acestea ind predicate standard, iar altele depinz^ and de implementare. Ar-
gumentele predicatelor Prolog, prin analogie cu logica predicatelor de ordinul
I, se numesc termeni, si pot constante, variabile sau structuri.
1.3 Limbajul Prolog si logica cu predicate de
ordinul I
Limbajul Prolog este un limbaj de programare logic a. De si conce-
put init ial pentru dezvoltarea unui interpretor de limbaj natural, limbajul s-a
impus ca o solut ie practic a de construire a unui demonstrator automat de
teoreme folosind rezolut ia. Demonstrarea teoremelor prin metoda rezolut iei
necesit a ca axiomele si teorema s a e exprimate ^ n forma clauzal a, adic a o
disjunct ie de literali, unde un literal este un predicat sau un predicat negat.
Sintaxa si semantica limbajului Prolog permit utilizarea numai a unei anu-
mite forme clauzale a formulelor bine formate: clauze Horn distincte .
8
Deoarece faptele si regulile Prolog sunt ^ n form a clauzal a, forma
particular a a clauzelor ind clauze Horn distincte, ele se mai numesc si clauze
Prolog .
Denit ,ia 1. Se nume ste clauz a Horn o clauz a care cont ine cel mult un literal
pozitiv. O clauz a Horn poate avea una din urm atoarele patru forme:
(1) o clauz a unitar a pozitiv a format a dintr-un singur literal pozitiv (literal
nenegat);
(2) o clauz a negativ a format a numai din literali negat i;
(3) o clauz a format a dintr-un literal pozitiv si cel put in un literal negativ,
numit a si clauz a Horn mixt a;
(4) clauz a vid a.
Denit ,ia 2. Se nume ste clauz a Horn distinct a o clauz a care are exact un
literal pozitiv, ea ind e o clauz a unitar a pozitiv a, e o clauz a Horn mixt a.
Clauzele Horn unitare pozitive se reprezint a ^ n Prolog prin fapte,
iar clauzele Horn mixte prin reguli. O clauz a Horn mixt a de forma:
S1_S2_: : :_Sn_S:
se exprim a ^ n Prolog prin regula:
S:-S1; S2; : : : S n:
Seminicat ,ia intuitiv a a unei reguli Prolog are un corespondent clar ^ n logica
cu predicate de ordinul I dac a se t ,ine cont de faptul c a o clauz a Horn mixt a
poate proveni din urm atoarea formul a bine format a:
S1^S2^: : :^Sn!S
9
Variabilele din clauzele distincte se transform a ^ n variabile Prolog, constan-
tele din aceste formulte ^ n constante Prolog, iar funct ,iile pot asimiliate cu
structuri Prolog. Deci argumentele unui predicat Prolog au forma termenilor
din calculul cu predicate de ordinul I.
Exemplu: [6]
Fie urm atoarele enunt uri: Orice sportiv este puternic. Oricine este
inteligent si puternic va reu si ^ n viat a. Oricine este puternic va reu si ^ n
viat a sau va ajunge b at au s. Exist a un sportiv inteligent. Cineva este sportiv.
Exprim^ and enunt urile ^ n logica cu predicate de ordinul I se obt in urm atoarele
formule bine formate:
A1. (8x)(sportiv (x)!puternic (x))
A2. (8x)(inteligent (x)^puternic (x)!reus,es,te(x))
A3. (8x)(puternic (x)!(reus,es,te(x)_batau s,(x)))
A4. (9x)(sportiv (x)^inteligent (x))
A5.Sportiv (cineva )
Axiomele se transform a ^ n forma clauzal a s ,i se obt ,in urm atoarele
clauze:
C1.sportiv (x)_puternic (x)
C2.inteligent (x)_puternic (x)_reuseste (x)
C3.puternic (x)_reuseste (x)_bataus (x)
C4.sportiv (a)
C5.inteligent (a)
10
C6.sportiv (cineva )
Clauzele C1, C2, C4, C5, C6 pot transformate ^ n Prolog, deoa-
rece sunt clauze Horn distincte, dar clauza C3 nu poate transformat a ^ n
Prolog. Programul Prolog care se obt ,ine prin transformarea acestor clauze
este urm atorul:
puternic (X) : sportiv (X):
reuseste (X) : inteligent (X); puternic (X):
sportiv (a):
inteligent (a):
sportiv (cineva ):
11
Capitolul 2
Programarea cu constr^ angeri
Programarea cu constr^ angeri reprezint a o abordare convenabil a a
formul arii s ,i a solut ,ion arii problemelor, care poate reprezentat a ^ n mod
natural ^ n funct ,ie de constr^ angerile stabilite ^ ntr-un set de variabile. Solut ,ia
acestor probleme este de a g asi astfel de combinat ,ii de valori ale variabile-
lor care corespund constr^ angerilor. Acest proces se numes ,te satisfact ,ie fat , a
de constr^ angeri. Programarea logic a cu constr^ angeri (Constraint Logic Pro-
gramming | CLP) este o combinat ,ie ^ ntre abordarea de rezolvare a proble-
melor din constr^ angerile cu programarea logic a. Atunci c^ and se utilizeaz a
metoda CLP, instrumentele de constr^ angere sunt ^ ncorporate ^ ntr-o limbaj
de programare logic a precum PROLOG. [7]
12
2.1 Satisfacerea constr^ angerilor
Exist a adesea c^ ateva opt ,iuni de atribuire care satisfac constr^ angerile.
^In sarcinile de optimizare pot denite criterii pentru selectarea opt ,iunilor
de atribuire care satisfac constr^ angerilor
Problema satisfacerii constr^ angerilor este formulat a dup a cum se
descrie mai jos.
1. Se d a:
Variabile multiple;
Domeniile de denire din care pot selectate valorile variabilelor;
Restrict ,iile care trebuie respectate de variabile.
2. De g asit:
Valorile atribuite variabilelor care corespund tuturor constr^ angerilor
specicate.
Abordarea de a g asi variabile care s a corespund a constr^ angerilor,
^ n special combinarea acestora cu programarea logic a, s-a dovedit a un in-
strument care poate utilizat cu foarte mare succes pentru a rezolva o gam a
larg a de probleme. Exemple tipice de astfel de sarcini includ planicarea,
aprovizionarea s ,i gestionarea resurselor ^ n product ,ie, transport s ,i depozit.
Pentru a face fat , a acestor provoc ari, trebuie alocate resurse unor procese
precum: rutele de autobuz, soldat ,ii din posturi, echipajele de zbor pe avi-
oane, echipajele de tren, medicii s ,i asistentele medicale a
ate ^ n serviciu s ,i
^ n schimburi, etc.
13
Lu am ^ n considerare un exemplu tipic de planicare. S a presupu-
nem c a exist a patru sarcini: a; b; c s,id, a c aror durat a este de 2, 3, 5 s ,i,
respectiv, 4 ore. ^Intre aceste sarcini sunt denite limite de precedent , a: sar-
cina atrebuie s a precead a sarcina bs,i sarcina c, iar sarcina btrebuie s a
precead a sarcina d(g. 2.1) . Sarcina este de a g asi valorile timpului de
start ale sarcinilor corespunz atoare Ta; Tb; Tcs,iTd, astfel ^ nc^ at timpul nal
al ^ ntregului program Tfs a e minim. S a presupunem c a ora de pornire este
0.
Figura 2.1: Constr^ angeri de precedent , a ^ ntre sarcinile a, b, c s ,i d.
Sarcina corespunz atoare de a satisface constr^ angerile poate de-
nit a ^ n mod formal, conform descrierii de mai jos.
Variabile: Ta; Tb; Tc; Tds,iTf
Domenii de denire: toate variabilele sunt numere reale nenegative.
Constr^ angeri:
Ta+ 2TbSarcina a, la ^ ndeplinirea c areia se necesit a 2 ore, este prece-
dat a de b;
Ta+ 2TcSarcina a este precedat a de sarcina c;
Tb+ 3TdSarcina b este precedat a de sarcina d;
Tc+ 5TcSarcina c se nalizeaz a ^ n momentul timpului Tf;
Td+ 4TfSarcina d se nalizeaz a ^ n momentul timpului Tf.
14
Criterii: minimizarea valorii Tf.
Aceast a sarcin a de satisfacere a constr^ angerilor are multe solut ,ii, toate aces-
tea permit un timp minim de nalizare. Aceast a mult ,ime de solut ,ii pot
denite ^ n felul urm ator:
Ta= 0
Tb= 0
2TcA
Td= 5
Tf 9
Sunt denite toate orele de pornire, cu except ,ia sarcinei c, care poate ^ ncepe
^ n orice moment ^ ntre 2 s ,i 4.
2.2 Rezolvarea problemelor de satisfacere a
constr^ angerilor
Condit ,iile de satisfacere a constr^ angerilor sunt deseori prezentate
sub form a de grafuri. Nodurile dintr-un astfel de grac corespund variabile-
lor s ,i arcele – constr^ angeri. Pentru ecare constr^ angere binar a p(X; Y ), exist a
dou a arce ( X; Y ) s ,i (Y; X) ^ ntre variabilele Xs,iYdin acest grac orientat.
Pentru a g asi solut ,ii la rezolvarea problemelor de satisfacere a constr^ angerilor
sunt utilizat ,i diferit ,i algoritmi de asigurare a compatibilit at ,ii. Aces ,ti algo-
ritmi, sunt considerat ,i ca ind operat ,ionali, ^ n ret ,ele de constr^ angeri. Ei
veric a compatibilitatea zonelor de identicare a variabilelor cu constr^ angeri.
15
2.3 Utilizarea limbajului Prolog ca limbaj de
programarea logic a a constr^ angerilor
Lu am ^ n considerare relat ,ia dintre Prolog s ,i sarcina satisfacerii con-
str^ angerilor. Prolog poate considerat un limbaj destul de specic pentru
satisfacerea constr^ angerilor, ^ n care toate restrict ,iile au o form a foarte ri-
gid a. Acestea reprezint a constr^ angeri ale egalit at ,ii dintre termeni. Aceste
restrict ,ii privind egalitatea sunt vericate conform termenilor din limbajul
Prolog. Des ,i constr^ angerile stabilite ^ ntre parametrii pedicatelor sunt de ase-
menea specicate^ n termenii altor predicare, aceste provoc ari ale predicatelor
ajung ^ n nal la acord. Prologul poate extins la limbajul CLP "real" prin
introducerea altor tipuri de constr^ angeri ^ n afar a de acord. Evident, interpre-
tatorul Prolog trebuie, de asemenea, ^ mbun at at ,it, astfel ^ nc^ at s a poat a face
fat , a constr^ angerilor specice altor tipuri. Sistemul CLP, care poate gestiona
constr^ angerile aritmetice ale egalit at ,ii s ,i inegalit at ,ii, permite s a rezolv am ^ n
mod direct problemele de programare.
Sistemele CLP difer a dup a tipurile de domeniilor de denire s ,i tipu-
rile de constr^ angeri pe care le pot trata. Familiile de metode CLP sunt denu-
mite CLP(X), unde X reprezint a zona de denire. De exemplu, ^ n metodele
CLP(R), domeniile denit ,iei variabile sunt numere reale s ,i, ca constr^ angeri,
sunt utilizate operat ,iunile de vericare a egalit at ,ii s ,i inegalit at ,ii, precum s ,i
operat ,iunile de comparare a numerelor reale. Sistemele CLP(Z) utilizate ^ n
alte domenii de denit ,ie includ CLP(Z) { numere ^ ntregi, CLP(Q) { numere
rat ,ionale, CLP(B) { zone logice de denit ,ie s ,i CLP(FD) { zone nale denite
de utilizator. Domeniile de denire disponibile s ,i tipurile de constr^ angeri din
implement arile efective depind ^ n mare m asur a de metodele existente de re-
16
zolvare a unor tipuri specice de constr^ angeri. De exemplu, sistemele CLP(R)
au, ^ n general, egalitate s ,i inegalitate liniar a, deoarece exist a metode eciente
de tratare a acestor tipuri de constr^ angeri. Pe de alt a parte, constr^ angerile
neliniare au o zon a de aplicare foarte restr^ ans a.
17
Capitolul 3
Concluzii
Sarcinile satisfacerii constr^ angerilor sunt formulate ^ n termeni de vari-
abile, zone de denire a variabilelor s ,i constr^ angeri dintre variabile;
Sarcinile satisfacerii constr^ angerilor deseori sunt prezentate ca ret ,ele de
constr^ angeri;
Algoritmii de asigurare a compatibilit at ,ii se aplic a ret ,elelor de con-
str^ angeri s ,i reduc zone de denit ,ii variabile;
Programarea logic a cu constr^ angeri (Constraint Logic Programming –
CLP) este o combinat ,ie ^ ntre abordarea de satisfacere a constr^ angerilor
s,i programarea logic a;
Sistemele CLP difer a dup a tipurile domeniilor de denire s ,i tipurile de
constr^ angeri pe care le pot trata. Sistemele program arii logice ^ n con-
str^ angeri sunt clasicate dup a tipul de constr^ angeri, ^ n felul urm ator:
CLP(R) – numere valabile, CLP(Z) { numere ^ ntregi, CLP(Q) { numere
rat ,ionale, CLP(B) { zone logice de denit ,ie s ,i CLP(FD) { zone nale
18
denite de utilizator;
Potent ,ialul sistemului CLP depinde ^ n mare m asur a de capacitatea
procedurilor specializate de a aborda constr^ angerile care pot aborda
anumite tipuri de constr^ angeri s ,i eventual de a implementa optimizarea
pe baza criteriilor specicate ^ n cadrul acestor constr^ angeri;
Un aspect al program arii CLP este denirea constr^ angerilor care sunt
c^ at se poate de rigide. Mai mult dec^ at at^ at constr^ angerile sunt stricte,
reduc^ and astfel spat ,iul de c autare s ,i^ mbun at at ,ind astfel ecient ,a. Chiar
s,i ad augarea unor restrict ,ii excesive poate ^ mbun at at ,i ecient ,a.
19
Bibliograe
[1] N. Pelin, S. Pelin, Aspecte teoretice ale program arii logice , Studia
Universitatis, Revist a s ,tiinit ,ic a a Universit at ,ii de Stat din Moldova,
2008, nr.3(13).
[2] N. Pelin, S. Pelin, Programarea logic a ^ n proiectarea sistemelor
informat ,ionale , Editura UST, 2011.
[3] N. Pelin, Elemente de programare logic a , Editura Nestor, 2000.
[4] V. Cotelea, Programarea ^ n logic a , Editura Nestor, 2000.
[5] S. L^ as^ ai, G. Sturza, V. Grigorcea, Introducere ^ n programarea lo-
gic a (Ciclu de prelegeri) , 2003.
[6] A. M. Florea, B. Dorohonceanu, C. Fr^ ancu, Programare ^ n Prolog
pentru Inteligent a Articial a , Universitatea Politehnic a Bucures ,ti,
1997.
[7] lvan Bratko, Prolog Programming for Articial Intelligence , Edi-
tura Pearson Education, 2001.
20
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Programarea cu constr angeri n Prolog [618105] (ID: 618105)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
