You are on page 1of 49
Lei 156 PROLOG — limbaj de programare al sistemelor expert, pentru caleu- latoarele de generafia ® V-a dup cum aflim’ experti japouezi In aceste prolecte. Prezenta carte realizeaz’ o introducere in acest limbaj al inteli- Genfei artificial, introducere orientati in special pe Micro-PROLOG Gisponibil-pe ealculatoarele compatibile cu ZX Spectrum (HC 85, HC 90, Cobra, TEMS, Cip, Jet), precum 9 sub sistemul de operare CP/M. Sint definite multe’ aplivatii (relajii) de uz general, din domeniul matematicti §i de analiza gramaticald, tn curs de aparitie: — GHIDUL utilizatorului SPECTRUM. Confine scheme hard, harta memoriei ROM, modurile de utilizare ale tuturor compilatoarelor disponibile: BASIC, BETA-BASIC, FIFTH, Asamblor, Dezasamblor, PASCAL, C, FORTH, PROLOG. Tn curs de aparitie M.M. Popoviei — BASIC pentru caleulatoarele ZX SPECTRUM, HIG, TINS, COBRA, CIP, JET, Instruefiuni — Exereifii ~ Probleme GHID complet de inifiere si conducere in programarea ealen- lutoarelor. © Colectie de pregrame Programe tebnico-stiintifice, de matematie’, de interes general, de divertisment (jocuri), precum i programele BETA BASIO si HISOFT BASIC. — LIMBAJUL MASINX al ealeulatonrelor ZX SPECTRUM, HG TLS, COBRA, CIP, JET, Limbajal de asamblare 280, ilustrat eu peste 150 rutine care realizeazt apectaculoase efecte vizuale, sonore, de seriere, de animafie, ete, ISBN 973 — 95175 — 5 — EDITURA APH — SRL SERIA ( INFORMATICA RYURICK MARIUS HRISTEV introducere jn: PROLOG un limbay al inte ligenfei artificiale 2X SPECTRUM HC COBRA TIM-S CIP SET AI ») BUCURESTI 1992 ind 0 pntrodiere is PROLOG", cartea se adreseara tuturor lor ‘dorese sh'se iifleze tn erst lina} de progamare att ce deasebit de celal. Carica watizeari inlrodnost teeptat® in coneeptele de hard ale Kimball pina 4 Gaborarva unel splieait eommlext (derivarea. Tortilla funetillor deo Pats) in alta! eapitols tm care eltitorul poate sesiza pirerea densebitA w sare Haba de poser, singurwl Ry care yu maternatielan poate prowrates in mod elegant” ‘Carten,cuprinde mumeroase aplieait dour general, din domeniut mate suatiit st al prosesdrittextelor, ene ot fl uUilizate sh dezvoltate 48 programele prope AUTORUL Copyright © 1091 EDITURA APH — SRL ste Cap. Preda_ nr. 12, sect. 5, 75137 Bucurest 60, tel 80.20.90, 80.98.03, 80.74.77 edactor, letnoredaclor, eoperta: TR. M. Hhstev sun de tipar 21.2002. Apieat 1998. Format 19 x 200176 Coll le tipar? ‘Tiporul exccntat a Tipogmtia UNIVERSUL — SA” et. 201/1002 PREFATA, PROLOG — un limbaj de programare al inteligentet artiticiale, ALituvi de Lisp si iinpreunii cu avesta formeazt 0 categorie aparte in lumea limba- jelor de programare datoriti modului eu totul deosebit de a rezotva prob mele. In PROLOG probiemele sint mai degrabi deserise decit rezolvate, rerolvarea civzind in seama compilatorulut (interpretorului) prin metode specifice. , Tatrucit PROLOG prezintii facilita{i superioare Lisp-ulai de progra- mare a problemelor, el a fost ales pentru dezvoltarea sistemelor expert destinate sit ruleze pe calculatoarele de generatia a V-a, de ciitre experti Japonezi care Iucreaai la aceste proiecte. PROLOG a fost dezvoltat la incepntul anilor °70 in Marsilia (Fran de citre Colmeraurer si echipa sa. PROLOG. se bazeazii pe caloulul logi formal (este un demonstrator automat de teoreme) astfel incit parcurgerew cu atenfie a primului eapitol este important pentru infelegerea aprofun- dati, a coneeptelor de bazit ale limbajului. Deoarece o practic’ pe un calenlator ujureazi-mult asimilarea concep~ ielor, relatiile (exemplele) dezvoltate an fost elaborate sub Micro- PROLOG produs de firma LPA Ltd disponibil pe calculatoare compatibile ZX Spectrum i pe cele care Increazi sub sistemul de operare CP/M ugor accesibile cititorilor. Obxervafiile din carte se refer Ia modul concret de operare pe ealeu- Jatoarele compatibile ZX Spectrum. Relatiile definite gi scriso cu litere aldine (grase) pot fi utilizate direct (iri_modifiedri) sub sistemul Micro-PROLOG. ‘Cuvintele scrise cu litere cursive (italice) trebuie mlocuite cu ceca ce reprezint& ele. Bxemple: wwmdy so hiloculeale ou oree nun mune ‘relajie se inlocuieste cu un cuvint eare reprezint numele unei relafii ete. CALCUL PROPOZITIONAL 1. Propoziti Definitie; Proporifia este un enurif care poate fi adevirat sau fals. Oricirel propozifii ise asociazk o valoare de adevir 1 dach propozitia este adevarati 0 dae propozitia este falsi 2. Operatori logiei Gu ajutorul operatorilor logici din propozifile date se pot forma noi propovifit 4 edror valoare de adevir depinde numai de valoarea de adevar a propozitiilor date Operatorii logiei sint : + negatia (non; not) A-conjunctia (3; and) ' Y disjunetla (sau; of) = implicatia = echivalenta ‘Tabelele de adevir ale operatorilor sint (A, B sint propozifii) aes tlie aisjunctia ma saya 0 Thal a cole hola aio olson e ate eeeer Ay Ry] Ase A) Baas caieHiilta zal r|o| o fo] ofafa ofa] o olol a lol a 4. Legile caleutulut propoziqional Definitie: Formulele (variabilele propozifionale) se formeagi duph 2 reguli ile sint formule A si B sint formule atunci (7A), (AaB), (A vB), (A B) gi (A B) sint formule Observatie: In general parantezele 1m se noteaz; atunci ordinea de prioritate a operatotilor este: 1, a, v, =, = la evaluare de la stinga la. dreapta. 0 formula a calculului propozitional s.n. lege (tautologie, formulii identic adeviirati) daci orice valoare de adevar ar avea variabilele propozitionale care intra in compunerea sa, valoarea de adeviir a proposifiel obfinute este L 1) A v TA (legea tertului exclus) A {Ajay 7a 1 0 1 1 0 1 2) (A > B) = A v 7B (legea negarii implieatiei) A| B/Asb 1 ABA SB) An aR TA = B) AATB 0 a 8) (A'= B) a (B= C) > (A + C) (legen silogismului) 0 0 Ree+| cone 1 0 0 eho Al BIC ees =C](A=B) a (B30)=(A=0) Oia 2a | a fiat 7 1 1 “Clea a ee eT eee Bee) aaa a ahs 4) Ae A (legea de reflexivitate) AAA eA A vA # A (legile de idempotenta) Basia eae Sh Uae alba AA Rees MS sealant ae Trane Te | 0 0 1 o | 0 1 HA KRBeBAA A vy Ba B v A (legile de comutativitate) a AnBRAAA Hat nA A | BIAWBBVAAVBaB vA peat ee ep LARS rol eee 1 ata 1 mel maleae | 1 1 osly=| (4g ifort yh 1 ° ofo} 1 ofafa]a 1 ° ofo} 1 olololo 1 1) A n(BAC) +(A AB) AO A v(B v 0) #(A vB) vO (legile de asociativitatey 1 fa ya at ght 1 vfolalelp}.e. | o 1 rf odo lato} ca [ta 1 ofija of 3 6 0 1 hades oil byle ect | fe 1 ie 1 ol! ° 0 1 obolotolol| « |) 1 eoocotw enh cerreoorr|® ccooeHe Hyp IA A(BVO)AABIA AC(AAB) v(A AO) A{ B 1|4 teh 1} o ajo ofa ofa ojo olo 8) AaB Av love af. oj a Bu fe o| o aja of 1 apa ol o ol oh Soo ave pe venES ar x © java) Av(BVQ)I(A vB) VO/A4 (Iv O)ae(A vB) vO Shay el cee Pee | ee Bilesilacel Ae tee ea a anita eioreeae niet v0) (A AB) v (AAO) A ©) (A vB) A (A v ©) (legile de distributivitate) eoocoHRE eocceo one esccouese Av (BAO) AV BIA vO(A vB) a(A v OYA v(BA0) ofA vB) a(A v 0) 1 af a4 1 i Hi Bi ea 1 1 if asl a 1 1 1 af. 1 1 1 ale 1 | 1 o 1]o 0 1 0 ofa 0 1 0 olo 0 1 A(BvC)(A AB) v(A 0) M9) TA ee A (legea dubled nega(ii) a | TA] OA ke 10) (A < B) = (B= A) A | BJAsB|B Alla +B) = (B eA) 4 ae pid 1 u 1}o]|o | o 1 ofa] o | o 1 olol a] a4 1 11) (A = Byte (4B = 74) A |B )A/qB)A=B [qB=7a\(4 = B) (9B = 74) pate ee fea a]/a]ofo] 4 1 1 1} Oy} 0 [a)s o o | 1 ofiji]o 1 1 1 ofofata ee eh 1 12) 4A + B) 6 (4B = 4A) A i [TAL TB) Ae B [the naa om) (aR = 8) See ee rjofoji| o o | 1 ojatalo} o o.| 1 OO) (portys tants ne ey 1 13) (A = B) »(A = B) a (B= A) A[B) Aw B/A => BiB Sai = B) (B= Ajl(A+B)os(A=>B) a (BA) | Le aya fa fa | 1 1/0) of ofa o Oy ie fee a see My A a(A A 1 L 0 ° > B) on BAB AAA = Bika = B) BR) B Beee 1 1 1 1 coon eon 1) (A#B), (Bed) soo) A)B)C|AeB iia ecoonHeH orereres HHeoooue 16) (4A > B) A Ba C]A a0 (AaB) a Boo|(AoB)a(Ba0)}(A=0) Talo) Ps aha tm es 1, o fa ° 1 wi Palo: 0 1 aol Aaah 1 oa 4 1 oO tg 1 ens a 1 (JA = 7B) 24 TA = TB( TAs B) aC TAs TB GAB) (7A 2 TB) 1 1 1 o 17) WA» 7 v in\74 7B 10 1 oj 0 | a: aitr} o Gfol 1 |i t 1 1 o 1 B) = 7A v 3B B) = 1A A TB (legile lui de Morgan) An BA A BY Ay TB [1A 0B) Tay 7B) ate lvao A lane eeay AYB) 4A] li | o of ojol a | Av fy -WAVB)[A 4B) AVR) © Aa ab ofa] oo ° 1 1 1 0 oO | 1 oO 1 0 0 1 Sub fiLvo eh sal A 1 18) (A +B) 4 (BSC) s(A VBC) AVB/ CAS O81 1 0 ° 1 afajaf a aJi}o} o° qfola) 4 ajolo} 0 ofala| x olajo} 4 ojoli} a ololo| 1 BHonHe A, Predicate Detinitie: Observatie: Definitie: 5: Propoziti Definitie: Ba0[A=0) a (B-20))Av BUA VR) =C1A 0) A(Ba0)-9(A vl 1 shea 1 ° i} 0 1 1 ved 1 o “t | 1 1 1 teh 1 | 1 ° mifiege | 1 1 a ana 1 1 | 1 Predicatul este un enunt care depinde de una sau mai multe variabile si care are proprietatea ch pentru anumite valori ale variabilelor (valor caresin{ clemente ale unei_multimi) devine o propozitie. Un predieat care depinde de n variabile se numeste predi- eat near. Folosind predicate si operator® logici se pot construi alte predicate. Predicatul B(x,...%,) se numeste consecin{% logic a predicatului A(x, . xy); notatie : A(x, « te) => BUx, «.2%9)5 dac& pentru orice valori ale variabilelor x,,.. x, propozitia. Aly... Sq) > B(x,...%,) este adevirata. Predicatele A(x, 2%) Si BOx;...%_) se numese echiva- lente logic; notafie: “A(x, ..- %,) = B(x; ...%_)3 dae pentru orice valori ale variabilelor x, ...%, propozitia ‘A(x, ...X,) <> BOE...) este adeviirati. universale si existenfiale Fie A(x) un predicat unar. Propovitia ,,pentru oricare va- loare permisi a variabilei x, A(x) este 0 propozitie adevii- rata" se numeyte propozitia universald asociat’ predicatulut A(x) notatie : (vx) SC) Z Detinifie: Fie A(x) un predicat unar. Propozitin yexisti cel putin 6 valoare x, a variabilel x asttel incit A(xq) sh fie © propo vijie adevaratii” se numeste propozitia existential asociat’ predicatulut A(x); notatie: (Bx)A(x) (notafie: atx existiy un unie x) Vie A(x) definit pentru-un numir finit de-valori ale variabilel x: (x1. %) Atunet (Wx)A(x) <@ AGG) A +++ A AG) (ax)A(x) 22 AGa) vv ACS) Conform legilor de Morgan rezulti regulile de nega! AUWx)A(x) @& ACE) v «+e Ase) = Gx TAG) AU@S)A(x) & AGS) A = 4 AGH) #* (V9 TALO)) Ovsorvatio: Regalile de negatie stabilite sint valabile gi pentru o mulfime infiniti de valori pentra variabila x. Fie A(x, y) un predicat binar aiunci (Vx)A(X, y) este predicat unar care depinde de variabila ¥ deci’ se pot forma propozitile (VyXW=)A(x, y) 81 (ays) AG, 9) analog 3(x)A(x, y) este predicat unar care depinde de variably deci se pot forma propozitiile (Wy)4x)A(x, 9) 31 @yNBNACs ¥) Regulile de negatie : AUeYYNVE)ALS, ¥)) GY TUVEIAGS, Y)) + BYIEN(AGS Y)) AUEayVRDAGS, y)) + (V9) ACYSIAGE ¥)) = (¥IEXI TAGS ¥)) AUVNENAG, H) = Gy AGNES M+ Gy TAG) AUyNaXIAGS, 9). (YN AGS)AGS 99) = VIKA TACG 9D) BAZE DE DATE A, Introducere LLimbajnl de programare PROLOG (PROgramming in LOGic) a fost deavoltat si implementat pe calenlatoare pentru prima oari in 1972 in Marsilin (Franja) de citre Colmeraner si echipa sa. PROLOG se bazeaz’ pe calenlul logic formal care deserie yi reprezinis ‘rafionamentnl uman Gq atare limbajul PROLOG difer’ exential de toate celelalte limbaje de programare (Basic, Pascal, C) eu exceptia Lisp cu care prezintd unele rreauinati, fit uni limba} de tip declarativ (Basie, Paseal, C sint limbaje imperative). ‘Tn progmm PROLOG este aledtuit din propozitii care definese relafii dintze diferite tipnri de obiecte care pot fi : numere, mulfimt (liste Telatii, cuvinte ete., in general: obiecte. In PROLOG nu se face distincfic Intro baza (colectia) de date si program, intre regasirea informafitlor si calcul efeetiv. Pentru a usura infelegerea conceptelor si sintaxel PROLOG se va folosi o sintaxa simplificata, urmind ea in penultimul capitol si se treac la sintaxa PROLOG standard. Observatie: Aceasti sintaxt simplifieati este disponibila pe ‘caleula toarele din clasa Spectrum. Pentru aceasta : dupit incirearea Micro PROLOG ® se tasteazi litera eu liter’: LOAD SIMPLE (blank-ul este separator). SIMPLE este un program seris in PROLOG care enptinde 26 blocuri seurte lungime 104K bytes fieeare, Dack unvl din blocuri nu neared sau s-a inedreat en eroare se reia inclireares de Ja, blocul respectiv. Aleiituirea bazelor de date A) Introducerea proporifiilor sste de forma: © proporit nume-obiect_nume-relatie_mume-obiect Observatie: “d.”" este prompt-ul prin care Micro PROLOG semnali- zeaziv e& este in asteptarea unei comenzi- 2 Mien POLOG este produ Inmegistrat al firme Logie Programming Asociates Ltda % Propositiile. se inbvodne folosind conned sale a. add (proporiticy ape de propoziti s io in_are—e Vranga_are—eapitala P ‘Observatie: Corecturile de tastare’se fae folosind DELETE si eursorul, Dupi terminarea tastirii unei comenzi se apasi ENTER. in camul existenfei unor greseli apare un mesa de eroare. Prompt-ul “mumér .” reprezint numirul parantezelor drep- te necesare pentru a termina in mod corect o propozifie ; apare de asemenea cin proporiie ge sntinde pe mal Relatiile intre obiecte sint: binare; mune—obicet_nume—relafie_nume—obiect unare: — nume—obiect_nume—proprietate Bxemple: earte_fieut—din_hirtie \_fieut—di instru str instrument —de—seris Bueuresti eri Bxisti 3 forme de a scrie tipurile de relatii intre obiecte : forma post-tixat: forma prefix nume—-obiect_nume—propriclate i: mnme—selafie (nume—obiect .... nume—obiect) forma infixati : nwme—ohieet_nume—relatic_nume—obiect + Observatie: Spajiul (blank-ul notat sau xj, parantezele “(" 3”) si liniile noi generate prin apasarea ENTER sint separatort de euvinte. (In general toate caracterele cu exeeptia eifrelor, literelor mari si mici, ”"—"" minus si” sublinierea separator. Numerele, “—’’ si literele se considera caractere alfabetice. Numele-obiect sint coustante alfanumerice, Atentie: un nume-obiect nu poate incepe cu o cif. Daci o constanti trebuie si confind caractere care sint separatori, atunci intreaga constant va fi serish intre ghilimele. Propozifiile pot fi introduse si prin comanda ‘‘aeeept” &, aecept nume—reajic in acest caz prompt-ul devine "nume—relafie.”", apoi se int de argumente, fiecare in paranteze. La terminare xe tasteazi niume—relafie vend odue listele gi se revine la situatia anterioari comenzii accept. B) Listarea, inregistrarea gi incirearea programelor Listarea programului se face cu comanda list” ‘pentru listarea intregului program: &. list all pentru listarea unei relafii: &. List nume—rélafie Tnregistrarea pe bandit magnetied a programelor se face eu comands sive? &. save nume—program ut ine ee ond = &. Load sume prograne ©) Haitarea Pentru a sterge 0 propozijie din basa de date se foloseste comanda delete” (eave este opusis comenzii_ add”) s &. delete (propositie) sau prin referire In pozitin propozitiel in lista mume—relefie : &. delete mume—relafie numar La folosirea comensit ,.add” noua propozifie este listaté ta sfirsit deoarece ict introdush ultima, O alti folosire a comenzii add” este &. add nnmar (proporitie) | care adangi propositia in list’ in pozifia indi Comanda kill”: ti de numir TLL nume—relatie — sterge toate propozitiile in eare apare swume—retatie @. kill all Sterge tot programul din zona do ineru @, NEW. on comenzi. In caz contrar apare mesajul ,,file error si operatin Interogarea bazelor de A) Variabile X.Y, % xt, yt, af, XE, YE, Zt. sink varia Titerele x, 9s AROLOG, wu sin vaiailediferite do 0 9B, na 60 © x02, Si numai ultimile 2 eitze sint considerate semnifieativ' ) Confira Entrebarea ,is” este de forma &. is (condiie) iconditie este un predicat] . | unde centijie este o propozitie in care nmol sau mai multe "vnc obits a ceva variate, PROLOG cat sn baza de date ded crm este adevarati sau falsi. Daci este adewaralay atuned nivpunsul este VYES!, dacd este falsi rispunsul este "NO" © alti tori a intrebiinit “is” este couiifie ... and eouditicy & eis (condifié no informatiitor ebarea "whieh" este de forma, a. Which (sistem—de—solufii :conditie and condipie) conitifie este wn predicat, adevarat pentru sistem — (condipie: de—solufit PROLOG afigeazi toate solutiile care satisfac conjunetia de condifii. Fiecare nispuns este de forma sistemului—de—solufit in care variabilele Sint inlocuite cu aumele obiectelor care satistac : condigie and... condifie. Variabilele din sistem de solufii trebuie xeparate prin. spati Dupi lista tuturor rispunsurilor posibile (eventual niet unul dack ‘a exist) se afigeaai mesajul “No (more) answers”, Dac '":'” lipseste apare un mesaj de’ eroare, In locul lui “and” poate fi folosit. " & Intrebarea "a 11" este siinilar’ “whieh” Intrebarea "ne" este de forma : &. one (sistem—de—solufii tcondifie & ... condifie) este afemindtoare cu “whieh” eu diferenta eX dup gisirea fiecirei solutit apare mesajul “more (yin) ?””, Daci se apasi "y" atunei se cauti solntin: urmiitoare, dae se apasi ""n’" eiutarea este abandonati D) Gisirea relatiilor definite. Pentru a gisi care nume de relatit au fost utilizate se foloseste : @. all (xix died san &, List diet Atentie: Faptnl ci un nume—relafiea fost atigat existent mei propozifii de definire a Pentru a afla dack o relatie K a fost definita &. is (R defined 1 a gisi toate relatiile pentru care exist definitii : @all(x:x diet & x defined) PROLOG confine un set de relatii predefinite (primitive), Incerearea de ‘w adiiuga In acestea noi propozifit ya da mesaj de eroure “Cannot add sentence for L’” unde 2 este mumnele relatiei. Observatie: Acclasi mesaj va fi afisat la incercarea de adiuga o propo- ritie la relatiile definite in SIMPLE. Definitiile sale sint protejate in module. sint coleefii de definifit de relatii care export in, mod explicit ele unor aunmite relafii, Numai relafiile exportate pot fi folosite de alte programe iar acestea nu pot modifica definifia lor (sint protejate). Pentru a gisi numele retatiilor exportate de SIMPLE : &. all(eix reserved) puns nu garanteaz atic Pent 16 BULvO 4. Aritmetioa PF SUM &.which (x :SUM (numiy—1 numar—2 2) Mispunsul va fi mumdr armat(de “No (more) answers"” pay cu anioesen suave 2 (SUM namie numdr meniry "YES" sau-”NO" SUM (x numer numis)) san SUM (numar x num) 4 semanul ”-}"" (in ca tale precedata de semnul ”—" a) num Observatie: Numerele in virguli flotant pot fi introduse ip orice formii dar sint afisate intr-o forma standard mantisa — intre 10 gi 102 cifra . cifra ... eifrd E eifra cir dacd exponental este 0 atuiel acesta nu se mai afiseazs, Numerele intregi trebuie si tie in domeniul — 32767, 32767. Numerele in virwuki flotantd pot avea 8 cifre semniticative, zerourilo auterioare nefiind_ considerate semnifieative. Hxponentii trebui si fie in domeniul — 127, 127, ft Pack rispunsul este prea mic atunci apare un mesaj de exoate "Arithmetic underflow" r Dack mispunsnl este prea mare atunei apare un mesa} ile eroare “Arithmetic overflow’. ilizarea constantelor care pot fi confundate eu cifre impnne utilizarea ghilimelelor Atontie: a 1) Cony aANT oslo @ primitivi: PROLOG. ‘Testare : is (numar END spunsul va fi “YES” sau ’NO" * 5 {(¥) ve% (x EN) sau (3) xeR (x INT) Conversie &. whieh (x+ munir INT x) {@)x (numir INT x)} rispunsul va fi intreg umat de ‘No (more) answers’ Restrictii: INT este o relafie unaré sau Dinard, Dacd este folosits ca relatie unari, argumentul irebuie si fie dat, Dack este folositi ca relatie bina, primul argument trebuie si fie cunoseut iar al doilea o variabili (necunosent) Pentru a testa daci un numiix este partea intreagi a altui numiir se poate folosi primitiva PROLOG ,,EQ”: . , &. is (amar INT x de x EQ intreg) [°YES” = @) x ((mumar IN Tx) 4 (x EQ intreg))) [('NO" > (Vx) 7 ((numar TN Tx) 4 (x EQ intreg))] * Atentie: .EQ” trebuie pus dup ENT : sin yF Cestaren Cipurilor de uumiere ©) inmultirea si impirtirea folosind relatia “TIMES” TIMES” este 0 primitiva PROLOG TIMES (x y 2) este adeviraté a Verificare &. is (TIMES (ntmar numar numdr)) analog anterior] \ punsul va fi “YES sani "NO Verifiearea divizibilitait &. is (TIMES (numar x numir) & x INT) rigpunsul va fi “YES” sau “NO” Inmultire &. whieh (x: TIMES (nundr numir x) ansul va fi mondr urmat de No (more) answers” Tmpirtire &. whieh (xi TEMES (x mondr numar)) rispunsul va fi mumdr urmat de “No (more) answers” Divizibilitate &. whieh (x: TIMES (y mondr numir) & x INTy) Rispunsul va fi: numar urmat de ‘No (more) amsw : Atenie Ia erorile de rofunjire : numerele in virgulé flotanti sint aprox! mari ale numerelor reale. O intrebare de tipul "is (TIMES (s numar—1 numdr—2) TIMES (mumar—1 x nnndir—2)) poate genera rispunsul “NO”. si numai daci x «y Rtestrio(ii: Las folosirea. primitive: TIMES poate Ti folosita o sigur vatt abil dar aceasta poate Ti orieare din cele 3 angimente (analog SUM). 1) Vestaren ordonsirii folosind relatia L LESS este 0 primitivi PROLOG care poate fi Solositi num verificare. LESS (x y) este adevirath dack x este humerelor daci x, ¥ sint numere sau in ordine alfabetic’, conform st dardului ASCHL, daci sint nume (cifrele preced majuseulele are preeed minuseulele). Ji mie deceit y in ordines 5. Modul de fuetionare PROLOG intrehiiri eu 0 conditie a) is (P) unde P este 0 propozitie irk variabile PROLOG cautd in baza de date comparind P cu fiecare proporitic Dacd giseste o propozitie care coincide eu P furnizeadi rispunsil YES"; dack a-ajuns la sfirgitul bazei de date firk a gis P atunei furnizeazi rispunsul NO” ' b) is (P) unde P este 0 propozitie ew cel putin © varidbiki in tocul unui nume-—obiect necunoscut. Ciutarea se face in acelagi mod cu diferent ci la comparatii PROLOG a8 variabilelorzvalori care sint mvme—olicet corespunzsitoare din proporiti Menfie: La intrebarea “is (x nume—relafie x)” PROLOG va furnins Hispunsul "NO" chiar daci exista o propozitie de forma “nue obiect—1-nume—relafie nume—obiert—2" dacik mame obi ect—1 este diferit de nume—obiect—2. Dar la tntrebaren "is (x mune—relafie y)” va furniza rispunsul "YES". PROLOG trebuie sk inlocuiased aceleasi nume de variabile cu aceleast nume de obiecte dar nume de variabile diferite pot fi inlocuite eu acelist Intrebiri whieh 2 C) unde V este o lista de variabile a @iror valori veritien condiia © PROLOG compari C eu fiecare propozifie din baza de date, fn momentul in care qiseyte 0 comparatic reusith afigear# valorile ear au fost atribuite variabilelor in aceeasi ordine in care apar variabilele in fapot continuk ebutarea pin’ la sfirsital bazei de date. In momental in ft ajuns la sfirsital bazei de date, indiferent de numirul solutiilor xisive {ucest nun poate fi si 0) afigeazt mesajal “No (nore) answers” Tyne € cate 0 conjunctie de conditii, acestea sint evaluate prin rezolvare pe rind, in ordine, de I stinga la dreapta. Wo, Observatio: Pentru a ve modal in e PROLOG rezolvi intrebirile, jwhich” si ,is” se inearel programul ,,SIMTRACE” (13 blocuri).”+ - eu &. load SIMTRACE gi ‘ @. is—traece (V :€) san ©. all—trace (V se apasit “y’’ sau.'’n’” si ENTER pentru da sau mu La sfirgit comands si &. kill simtrae ; va sterge ,,SIMTRACE”. 'n cazul conditiilor complexe si a bazelor de date mari ri i page cond eon sy si a baz mari rispunsul Ia intre- po eee pater arene cry ae ai testrictive (cu solu}ii mai putine) se pun la inceput. In acest fel numarul eventualelor solufii scade si deet seade si ti z cirii lor. REGULT Regu ’ Regulile sint propozitii conditionale de forma P if C. propozitie it & 6. condiie iv = Awe O care se citese : Propozitia P este adeviratt: pentru toate solufiile penru care conditia de forma © este adevirata. Regulile pot folosi alte relatii definite. Togulile sint listate in ordinea in care au fost introduse. PROLOG poate schimba nuyiele unor variabile dar au poate schimba tipul lor Pxemplu: regulile pentru relafia “maxim—dintre” x maxim-—dintre (x x) y maxim—dintre (x y) if x LESS y x maxim—dintre (x y) if y LESS text care va fi afigat in nispuns. x fn intrebarea whieh poate fi introdu: &. whieh (x text y + condifie) _genereart rispunsul “obieot—a text obiect—y" Textul nn influenfeazit giisirea solutiel. Modul de funcfionare PROLOG La intrebiiri de forma &. whieh (VY :C& O'..) PROLOG giveste solufii prin metoda back-traking (edutare inap Pentru a gasi toate solutiile unei conjunctii de condifii se procedeazé in felul urmator : — se cauti o solufie pentru prima condifie; — ou aceasta se merge la condifia urmatoare gi se verified duck este o solupie si pentru ei; — duct +a gisit o solufie si pentra condifia urmitoare se merge mai departe in mod asemanator 5 — dct solufia nn verified eondifia respectivi, atunei se cauti solutia: fumilloare pentru condijia anterioara, dup’ care se repetd procedeut. 2 Cind rezolvaren nei increrupe ciutared conditii implica aptivanss unet reguli PROLOG fe propozilii in bien de date si genereaa o intrebare Auusiliar’, conform regulii intiluite, Fieeare vispuns In aceasti intrehare suplimentari este © solutie pentru condifia respectivi. Pentru a gisi toate solutiile unei singure condhtii se cauti toate propo- ritiile cave verilick conditia respeetiv’ la care se adaugi toate solutile requlilor implicate in eonditie. Observatie: Folosirea ,SIMTRACE”, fn timpul rezolvarli, regula care este folositi pentru a incorca giisirea solutiilor conditillor puse in intrebare este identitieata prin pozifin sa in lista propo Zifiilor pentru relafia respectiva. Dack este gait o solupie se afigeazd noile intrebiri impuse de couditile prelirainare ale regulil_""noi—futrebiri eondifis —pretiminaye’. In identificatoral “(mumar—1, mumar—2...)"” mendr—1 semnified pozifia condifiei sau regulii in intrebarea curenti, restul numerelor fiind 0 istorie inapoi la intrebarea initial 2. Reguli definite reeursiv Pentru relatii care nu pot fi definite decit recursiv (adic& prin definitii care se referii la velafia care se defineste) utilizarea regulilor este tundit- ment Atentie: Orice definitie recursivit trebuie sii aibi o parte nerecursivi, are sis asigure iesirea din reeursivitate, in eaz contrar ea find complet circular. Parte recursivi a'detinitiel trebuie pus dup partea nerecursiv in special dani definitia este utilizati pentru a gisi toate solutiile intermediare ale relatie! ile Inverse este mai eficient si se u:ilizeze definifji separate. Pentru rel Bxemple = 1) definirea relatie! “mai ie egal” x ma —mie—egal x x mai-mie—egal y if x LESS y ‘mai~mare—deeit’” 2) definires rel X mai—mare—deeit y if y LESS -x 3) definirea relapiei “mai —mare—egat”" X mai-mare—egal x are—egal y if y LESS x 4) slefinirea relafie’ “di x di ibit—ew y if x INT & y INT & TIMES (yzx) & 2 INT Atentio: Din cauza restricfiilor impuse primitivelor aritmetice, aceste pot fi folosite doar pentru verificare, y fnoturial y este adevarata di yestoh2 ..(c— 1x 1 factorial 1 x fuetorial y if x INT @ 1 LESS x & SUM (21x) z factorial X & TIMES (x Xy) [ealsx! (x INT)AQ 0) = UC a 7C’) este tautologie] Definirea relatiei "‘sublisti—a"" x sublista—a y if (forall z apartine—lai x) then z aparfine—Iui 9) Definirea relatiei ' “egal”: x egal y if x sublistinay & y sublist#—a x Definirea relatiei de ordonare ‘ x ordonatis este adevarati daci pentra toate perechile vecine (y, 2) conditia y mai—mic—egal z este adeviiratd x ordonata if (forall (yz) vecini—pe x then y mai—mig—egal 2 eva Vofinires ane liste de numere positive x num —pox if (orally apartine tui x then @ LESS y) Dofiniren relatie: “dis Mixjunete (xy) este Tati dack x gi y sinh liste fini elemente 4) dsj ot @ aparfine—lui x & neve (xy) if ~ apartine—1ui y) hb) dinjumete (xy) if () isall @i2 apart 2 aparfine—Iui y) 0) disjunete (xy) if (forall z apartine—Iui x ne—lui x & then net 2 apartine—Iui y) sae? © conditie “or” este de for (either © or C) ande © si C’ sint conditii simple sau conjunctii de eonditis Tarantemle indica unde se termind C’ gi incepe conditia urmitoar Seninifieatia logied @ conditie’ “or” este: sau @ sau C" [Cv] Condifia. “or se citeste astfe Pentru a rezolva o condifie walvis conditia C nv rezolvai conditia C" © pelatie definitt prin 2 reguli poate fi definita printr-o singuré reguli, Uutilizind relatia or" Dofiniven relatiet “apartine—lui x apart lui (y|% it (either x EQ y or x apartine—Iwi 7) ither ( or ©) inirew relafiei “are—Tungimen moa y if EQ ( & y BQO Q@)X) & X are—lungimea Y & SUM (LY 9) x uniunes (yx) if x isall (X= (either X apart Ini y + X apartine—tui 2) Definirea relatiei’ “ultim’* ‘ xu my (either y EQ (x) or y BQ @|X) & x wltim X) Detinirea relatie’ “veci (xy) veeimi—pe z if (either 2 EQ (xy |X) rz EQ (YZ{X) & i-pe @| X) (xy) ve 5. Expresii Observatie: Pentru a utiliza expresiile se inearci programul ,EXPIRAN? (6 blocuri) care recunoagte si compileaz’ expresii. Formal o expresie este ‘ . © constanté © expresie aritmeties son numiir + un apel de functie (0 variabili 0 lista de expresii Expresiile pot fi folosite in relatii "=" "este de forma: EL E2 aunde BL si B2 sint expres Aceasti relatie este o extindere a relafiei BQ. Cind ”—" este rezolvati Se evalueari inti expresiite £7 gi B2, apoi ele sini comparate prin EQ. ‘Duck na din axed eff varia, sanelacestdn {ae aeibuls vlonten Expresiile aritmetice i apelurile de funetii sint tipari speciale de liste. O expresie aritmetic’ este o lists de toma (enpresie operator expresi¢) si-in relatii de expresii. O relatie unde operator poate fi * penten ininultire % sam / pentrn impirfire pentru adunare ~ sau — pentru, selidere devi expresiile aritmetice sint liste de 3 elemente (parantezele sini ride al Sed element eate uy aperatora Pes ch Miied expre atnned p (dues aves! operator © st poetied aint te rindul lor exprenty « introdue paranteze suphi ulilor ate Hafli deb invecinati expresia este eval ) captain Sint evalua(i ew pr weratori = si Ta dreapian {i carn] in care exist operatori + sau ~ invecinafi expresia este evulunti in ordine de Ja stinga Ta dreapta (conform regulilor aritmetice obisnuite) Atenfle: '%"" si '"—"" sint operatori prineipali; “/" gi-"~"" tiind sino: nimi aeceptati +" trebnie ineadrat Inive separator de cuvinte de exemplw blank-uei) Un apel de functie este o list de forma, (i ED... Bn 1) a “EL ... Bn — Isint expresii si R este o relatie n-ard a eiirmi nume tushitie si fi fost dectarat ca funetie en comandi : function K ‘ sint primele n — 1 argumente ale unei relafii de forma : RVI ...Ve—2 x) (2) V1... Vn —1 sint valorile exprestilor BY... En — 1 JI unei functii (1) retumeazi, yaloarea variabilel x care sar ob{jne 4. evnditia (2) ar fi rezolvata. Menfie: Dack o relajie nu este declarath ca functie Inainte de folositd intro expresie, atunci fnterpretorul: de expres vi compila apelul finetiei in expresia respectivl. gi o va Kise sub formti de lista. Interpret i atentionearsi asupra acestui fapt prin mesajul not to be a function” Daci apeltdl dunefie’ a lost intr-o intrebare, atuncl se va objine un Mispans gresit. Daci apelul functiel s-a fieut intr-o proporitie aixine! corectarea se face in modul wrmitor = s¢ declarii R ca tue inet R — se editeazi propszitia fiir modifica : se apeleazi editorul Apol se iexe imediat din editor fri a efectua modifieari (Baitorul decompileaxi forma compilatz a ptopozitie’ apoi recompileazi, dar tinind seama de faptul ek 2/2 fost declarat, ca funetie). gist fonctiile care au fost declarate se foloseste b (xix fume) saw in ie declurati ca fanefie este stearsi atunei automat v poritin care o declari ea funetie, ssi apelurile de fmnetii pot fi imbrieate una in alta fi PROLOG xi compileze argumentele unet relafii_ ca expresit ke folosesie 4p plasas intre numele relatie! gi lista argumentelor de tip expre © proporifie (conditie) folosind ae (BL ... En) unde 2 este numele relajiel si ZZ... Hn sint expresii “4-"" semnalizeazi faptul ch HT ... En nu sint argumente normale ale relate: 2, ei unele sau toate confin operatori aritmetici s functii. Expresiile pot fi folosite ca argumente ale unei relafii numai in forma, prefixati. Relafia de egalitate : BL = k2 presit este de t este echivatentd: ea EQ # (82 £2) Formete relationale intre expresii Rit (EL ... En) sint compilatesub form unei condifii complexe 4:”” * (R (LE... Ta) 4 (conjunctiode—condifii) Hyaluarea conjunctiei—“de—condifii va genera valori pentru variabilele din termenii 77 .., Tn, astfel incit acestin devin valori ale expresitlor originale B1 Formele compliate ale expresiilor aritmetice folosese relafiile aritmetice definite astfel + (sya if SUM (xy = (xya if SUM (yz9 + (xyz) if TIMES «yy % (xy if TIMES formele compilate pot fi afigate dacti se utilizeaxt, propozitia “rel form” &. add (rel—form) atunci la listare sau editare relatiile care folosese expresit vor fi afisate in forma lor compilati, “rel—form'” na opreste compilarea expresiilor, ei decom- pilarea avestora la listare sau editare. Pentra a anula efectul “ret—form"” se foloseste & Gind 9 formii relafionali intre expresti este evaluatii se caleuleazit int conjunctia—de—eonditii care caleuleaz’, valorile expresiilorargument. Forma, general a intrebirilor-expresii este & (vxpresie) care are ea unig sispuns valoa (zx) kill rel—form » ra expresiei os. Detinirea funetied tw 1 tuctorint t x fuetorial 3 1 LESS x zai Dé 2 factorial X & y=(X+9) tunetion factorial fancied “lungimne” (similar relagiet “are—lungimen”) : () lungime 0 (x]y) lungime zit y lungime X ¢ 2=(X40 funetion Jungime Defi Definirea functiei ’suma’’; suma numerelor dintt-o lis Q suma o (x|y) suma z if suma X & x (X+%) funetion suma medie" ; media numerelor dintr-o Hist: Definirea funetiei x media y il (suma x)/(lungime x) ection medic intrebiri citre utilizator avind in mod similar listei de variabile told’ este o relatie care genereazi ueinymur argument o Lista dle variabile Gh netic Svehieh’” cu diferenta. eh in cazul acest PROLOG este iN cure intresbi ntitizatorul si primeste un xispuns de Ia el ‘ Heeeare He penta a utiliza elafia “as-—told” se incarcs fisieral ,,TOLD”. (3 blocuri) i ‘seeventa de eleinente din lista de variabile este afigatii, 7 Cndicind. ca PROLOG. este in asteptarea unui Tispuns La evaluare ivmatii de Wn oondiia, past. ‘Mipnl gi efectul raspunsului : You condifia (propozitia) se presupune a fi adevitrati, Ja eliutaren inapot (back tracking) intrebarea nu va fi repetatt; 9 a. no condifia (propuzitia) se presupune a fi fabs ans. J este a seeventis de valori, eite una pentru fleeare variability diterita din lista de variabile. Conditia “is-told’” este adeviiratt peatru setul de valori ale variabi- Jelor dat ca réspuns. A u-a valoare din seeventa—rispuns va fi atribuiti eelei de a n-a variabile din lista de variabile in ordine de Ivy stinga Ia dreapta Prin backtracking, intrebarea poate fi repetats pentru cliutarea nor solutit alternative pind la furnizarea rispunsului “no’” sau “inst...” just... Analog “ans...” cu exceptia et intrebarea nu va fi repetati la cautare backtracking. Se consid solutia dati...” pentru conditia "is—told” este uniek sau ultima. Conditia “is—told’” poate fi folosith in intrebiri sau reguli precum si in depanarea sau dezvoltarea, unor programe de aplicatii 7. Comentarea programe 2 Pentru @ introduce & Dilitagi = — ke adangi propozitii_ despr |. se adangi comentarit igno PROLOG”) +" c Primitiva PROLOG “7/6” este’ de forma {. (comentariu) rice proporitie care utilizeazdi aceasti primitivi este ignorati de PROLOG in timtpul evaluinii. O propozifie /+” este intotdeauna adeviirata. Definiven functiet “iaetorial” inentarii in baza de date (program) exist 2 posi- © relatit ate de compilator, folosind primitiva funetion factorial > 1 ftaetorial 1 it J+ (poate fi Colosité doar pentru gisirea treg day) factorialului unui numa x faetorial y if bile (x intrey (y valoare) & 1 LESS x & x INT ) oy a(xefaetorial (x 1) iunctia “factorial” a putut fi, dpelati recursiv mimai datoriti faptului ch a fost declarata anterior ca functie. Telagia “comentarin’’ poate fi folositit in forma nnme—reafie eomentarin (comentarin) unde “(eomentarin)”” reprezints comentarinl 1a relatia nume—relagie”” Pentru a gist comentarin unei relafii se foloseste whieh (x: nune—relatic eomentari fs wari x) Monin w gterge toate comentunile se foloreste KIM comentaria Atentic: Comentariile ocupi memorie si couskand Gin de ealeul. Pentrn Oa progrinnele st lie mat inick sis ralece mai repede eomnen tare trebue eliminate (pastriad eventual a variant’, a programulni coment) Dofinlvea funetiei “div” ’ Mt tay 2) este adevirats died x este partéa intreagi a expresiel x]¥ (sy intregi). div yx if x INT & y INT & TIMES (y X x) @X NT 2 funetion div foxtrage Oy 2) este adevaratd daci lista x este fista y din care fost extras elemental x si toate duplicatele sale. xin 3 cara: yo este 0 listh vidi ori ; ¥ este o lista al cArei prim element este x MANIPULAREA LISTELOR 'y. osteo Jisti al elirel prim element este y diferit de x 41, Relatia ,,coneat” mai (20.0) dhe xtrage (x(xly) 2 if efinirea relaiel “eoneat ¥ Definires rea i dack 2 este remultatul eoneaientirii extrage (xy 4 foncat. (% ¥ #) este, adeviiratll diel. s istei x la inceputul listet y =e eg ‘ extrage (x (viz) (y| X)) if not x EQ xé extrage (xx X) Dofinirea relat eoneat (() xX) eineat ((y | 2 = (9 1 X)) coneat (2 x X) implu lista (x | 9) ‘Atentie: 2 nu esto pur sf Pentru a descompune o list y compactati 2 este adeviirati dack 2 exte lista con{inind toate whieh (xy seoneat (xy (istd))) ee serene fini repetare Pentra a exclude rispunsurile care contin liste vide: Bee Gio o isis vias whieh (x |} yy 21% y este o, list en un prim element x atunei % trebuie si alba eo nent ((x| ¥) @| X) (list) fxemenea, en prim element x dar coada listei x trebuie si fle versinnea compactatii a cozii listel y adie simu cuprind’ nici un duplicat al elementului x pune o list in locul in eare primal element al Tetel se Pentru a des repetit wh ch (x C19 Ft sonent ((x| ¥) (¥| 7 (stay) ay) cu un anumit element ©: i (x| 9 if extrage(xyg & compac ack a 2-0 list ineepe whieh (x(e|¥) onent (x(e | x) (listi))) : Avon y compactata 7 Sos vordond tie poate fi folosita pentru a extrage toate duplicatele dintr-o Definires remtitte adovaraih dack x este o list ordonath {inia-raspuns la intrebarea “fall” de forma Bais 4 camer x tant (2:6) & x compactata y S Gate o lista ew an clement a Dofiirew relatiet “Tayi” : x ete o lista cur cel putin 2 clemente y gh 7 il ie Tati (a y x) este adevirati dack lista y este formats din primele x Sie of Histd cu cel pufin 2 elemento y $7 wifel incit y LESS z Hh xy) poe meet 2 mat prime () ordonata Taji (xy 2) if comeat (yX2) & (x) ordonata meter P y are-lungimes x @ yl 2) ordonata if (y| 2) ordonath fants dil Tungimea x este: dati: (y gx) erdonacait af . eae shed tora vy) hy lungimea x & (| x) ordonata eoneat(y Xz) 43. Detinivea relatied “seyment—in! seitbament-in z ete adevirath dack lista x este segmentul, inifial al liste 2 (x'ly) segment—in 2 if concat((x| 9) X9 Definirea relafiet “segment—fin" : x segment—En y este adeviirati al listei_¥ “i lista x este segmental final (x |y) segment—fin ait coneat (X(xly) 2 finale trebuie si fie liste nevide. Atenfie: segimentele initiate Definiren relafei "segment —l Xicgmental yrane,aderrapt ack Tata x ete un_ segment a eT scar erticialy ipiat Fiwetimeonteetiny yo x segment—in.z Dofinirea relatiei “inversi” = x inversi y este adeviiratd dack y este lista nevid’ x in ordine inversi (x) inversi (x) (xy|z) inversa Nit ) inversi ¥ & at (¥(~) X) Definir Sterge (fy x) estendevaratd dack » estelista y eu elomentul x extras (sters) sterge @y) it coneat (X 1X) ) & eoneat (XY%) Definirea relatiei x permutare—a ye dach lista x este 6 “permutare o ? listei y a() (x] y) permutare—az if () permutar gterge (x2X) & y permutare—aX poate {i folosit pontra generare sat verifieate Dofinives relation “sortata’ : ¥ sor iy este adeviiratit dae y este o permutare ordonatit » listel x x sortata y if y permutare—a x & y ordonata Jute fi folositt (dar inefieient) pentru ordonarea listet x dati. Hoflniven relatiet “ultim—al” = ¥ nliim al y este adevarati daci x este ultimnl element al listei y vo ultim—al y if coneat (x) y) Hei v upartine—lai y if eoneat (x (x| X) y) pire relat “apargine Ini’ Hoflutren relaties “"listi—putere”” x Ilnti—pntere y este adeviratd dack y este lista tutuzor sublistel ale liste x (lista vidi este gi ea o list’ care trebuie Si apari o singur’ dati) x listi—putere (()y) it yisall ( ment—al x) Dofluirea relafiei “simetried X slmoltick este adevirati daci x este o list care poate fi cititi la fel de Ia cap la coada si invers xoniiletr if x invers& x Hotlnitin relatie’ “veeini—pe” = (vy) veel concent (X( xy} XY) 2 icpe # if Definitin ied “sterye’™ > george (s(x) ¥)9 peryo (ety | 2) (01 X)) if ) glerge (x7 nied “se 2X) este adevirath dacii'Z s°X'sint vezultatul separdrii lige! y in 2 componente, astfel incit 2 are lun- gimen x Dotlnitin yy (xy 1) separé (cy 2X) if conent @X ye xoane tung 6 2separa (xy “2X if x lungim « conent(2Xy) ra (0 x() x) re GW 1) |X Y it 0 LESS x 4 SUM (Zi x & separ’ (Z2X¥) 2. Sortarea (ordonarea) listelor Pentru a sorta (ordona) in mod eficient (timp de ealeul minim) o lista se va folosi metoda “divide et impera”. Aceast& metod consti in a diviza © problema complesis intr-o serie de probleme mai mici, rezolvate separat, ale ciror solutii sint reunite pentru gisirea solutiei problemei initiale. © list cu_un element este sortata - O list: mai mare este separati in 2 subliste cu ajutoral n ‘poi cele 2 subliste sint sortate si poi cele 2 subliste sint reunite intro singur’ Ii astiel incit lista final si fie sortaidl. Aceasta se realizeazi eu relatia uneste. Definirea relapiei “unest uneste (x ¥ z) este adevitrat dact lista x sortati este listelor sortate x si y trebuie considerate cazurile — una din cele 2 liste este vidi daci ambele liste sint nevide atunei exist’ primul element al fieciret liste sint egale — primul clement al primei liste este mai mic deeit primul element al celei de-a 2-a liste sau_ vice-versa. mie” poate fi definit utilizind primitiva LESS sau relatia Relatia "is—told” Lista originald este despicata in 2 subliste de Iungimea aproximativ egali ex ajutoral relajiei “Wespied’” definiti prin relafia se Programul complet este x sortare (either () or (2) sortare (z)) (xy | sortareX if despied ((xy¥{AYDE Ysortare x1 &% sortare yl & uneste (xl yt X) sortare () « a ee neste (XQ) x) phe COeiy D(x] 4) (ext Xp) it umegste (y % X) eyte (ix) 9) @| XN) (x ¥)) if umegte (y (|X) ¥) wuesee ((el 9) (| X) | ¥)) if maiomie x é uneste ((x| y) XY) a Wespied (xyz) it F (ung este definit’ in varianta 3). separa ((div me x) 2) xy inde relatia separa’ Nofinirea rolatie: “mai—mic’ tivo mie y Yvon mie (xn Dal partifie (x y inifin relatier “partitie” 2 X) este adeviirati daci fiecare lement al listei x eare este mai mic ca y este in lista x si toate celelalte elemente ale lui X.sint in lista X purtitie (Ox OO) tifie (Cx) yy 2X) X) Yi x LESS 2 & partitie (yzXY) ipie (xy) 2X(e1¥)) iF not ce LESS 2 & tie (y 2X¥) ‘sortare—rapidi” folosind relatia “pa sortare’’): part Hotinivens relatie’ ie’ (asemiini tantn eur relatia () sortire —rapida () {\) sortare—rapida (x) Av yl a)sortare—rapida purtigie (Cyl 2)x¥ 2 & Yo sortare rapida xt & Z sovtare—r at Qt (x| yt) x) pida ytd sort wlevaratt cd de Tungime x Detinives relafiel “uni ( ¥) uni sort % este 2 este lista sortatsi 1 Tistol y (0 () unimsort() (L(y )unissort () (xy) uni-sort zit 1 LESS x & uni—desp ((xy) XY) & Xuni—sort xt i-sort pire te (xl yi 2) uni—desp((x y) (@ X) (¥Z)) if aa(liv'x 2) é Yar) & ara (zy XZ) regulile pentru “uneste” si “separi’”}. sep (la aceasta se adaug . Funetii si liste Primitiva “’|’’ nu se foloseste niciodat intr-o expresie urmata de o list @e tip apel de functie. Pentru a specifica coada unei liste ca un apel de functie ge utilizeaz apelul de fmetie “CONS” care adangt un element in fata listei “CONS” este definitai in SIMPLE” si este recunoseut auto- mat ea funefie in expresii fiind definita in modu CONS (xy (x] y)) Observatie MPLE” mai confine relafiile : APPEND" echivalent’ cu_“eoneat”” ON” echivalenta cu “aparfine—tui”” 48 ANALIZA GRAMATICALA 1, Analiza listelor de envinte (1) 0 Iinit do envinte este propozitie dack poate fi separati in 2 subliste, find de tip. propozitie—substantiv si cea de a 2-a find de tip verb. “Dect structura gramaticaki a unei propozifii P este lipnl (Px y) unde x este 0 propozitie—substantiy si y este verb. Atumei relatia “propozitie” (care aratii daci 0 lista ‘inte x-este propozijie) trebuie si fie de forma x propozitie Py x it APPEND (XY¥ x) & . X prop subst y Y propoverb x 1) proporitie substantiv este format dintr-un articol urmat de o expresie gubatnntiv. MyIAMUT pentru recunoasterea le forma: x prop APPEND (XY x) & substantiy PS este unei_propozifii subst WS y 2% if N urticot Yo exposubst x Hothniiin pentru “artical” este (x) articot (Ax) it ART Welupik. “dleflonar” represinti bya de date pentru cavintele camoseuto, Willi oxle un Vocabular care euprinde lista de cuvinte si tipul asociat lor Alonfle: Programul poate reeunoagte numai cuvintele aflate in dietionar. () propevitie care cuprinde cuyinte care m_sint iit dietionar mut vit fi analizats core Hooven{a de program penteu relatia “deionne’ gi tn divfionae ART o diefionar ART niste divjionar ART % x dictionar ole este de forma + ote. nial pentru relia “exp subst!" este exp subst (Sx) if x diefionar SUBST (x) exp—subst (ES y 2) if APPEND (X Y¥x) & X exposubst y & : Y adjeetiv Seventa dle program pentru slate, “Setionar” st anbstantive este ae subst—1 dieyionar SUBST subst—2 diefionar SUBST ete. Programal pentru relatia “adj (xy adjeetiv (ADJ x) if x dicjionar ADI Seevenja de program pentru telatia “die adjectiv—1 dieyionar ADJ adjectio—2 diejionar ADI ete Programml pentru recunoas! este ona” si ndjective este de forma : xen unet propozifii-verb PV este de forma: x prop—verb (PV y2) if APPEND (XY xX) & X exp-verb y & Y exp—subst z Programul, pentru relafia, “exp —verh’” este (x) exp—verb (Vx) if jionar VERB (x) expoverb (EV ya) it APPEND (XY x) & X expoverby & Y adverb z x di Seeverfa de program pentru relatia onar VERB verb-2 dietionar VERB ete Seoventa de program pentru relafin “dieti adverb 1 diefionar ADV adeerh—2 dietionar ADV Relatiile definite anterior sint ineficiente datorit& folosiriirelafiei Al nar’ si verbe este de forma: verb—1 di jar’? si adverbe este de forma : ND. a0 B, Anatiza listelor de envinte (I) 1D oll metod’ de a analiza propositille este A propozitie (Py%) if (XX) propo subst y & Np Hommnifieatia logic’ A Gite © propoxitie de tipul (Py 2) dack diferenta dintre x si coada sa X este } proporifie—substantiv y gf X cate o propozitie—verb z Howula pentru relajia "prop—subst" trebuie si unifice o pereche de liste ste: (ur etructura gramatical’: (sy) p rop—subst @Sz x) it &Y) rtieolz & (¥ yy) exposubst X Meninificatia logicd este: Giferenja dintre x i coada sa y este o propozijie—substantiv de vipnl (PS 2X) dhofiexinth Y astfel incit diferenta dintre x gi sublista condita sa (V). ea tn articol 2 si diferenfa dintre Y si y este o expresie substan-” tiv X Tn acest 0 ud folosivea rel fa fost evita fied Paplut ed lista eare cate diferenta dintre x st y este descompust (9 Haan se cuptind axtivolul si expresia—substantiy este artat imple Iu repre cae aceator subliste ca diferenta dintre Y si y pentriy un Hea me a Te o sublistt din coada lui x mai mare decit s ecunoasel dferenta dintre o pereche le Fee ee czentind o list coninind un unie element; articotel (x] 9) particnt (Ax) if x dicjionar ART Votinitin relatie’ “exp—subst”” este: ((1] ») yy exp—subse (Sx) if x dictionar SUBST (oy) expo subst x X) if (eV) exp subst z & (Vy) adjectiv X Dotinifin relaticd “adjectiv’” este: (|) yy adjeetiv (Ady) iT var ADS " Definivea relatied “prop— verb” este (xy) prop—verb (PY z X) if (x) exp—verb 2 & (Y y) prop—subst X Detiniia relagiei “exp—verb” este (xy) exp—verb (BY z X) if (c¥) exp—verb 2 & (Vy) adverb X Definifia relatie! "adverh”” est ((x| yy) adverb y if y dietionar ADV Setul de relafii definite este utilizabil, atit pentra analiza gramatical junor propozitii date cit si pentru generaren propozifillor noi, folosind cavinte din dicfionar. Pentru generare se poate folosi intrebarea whi gh (x: numér lungimea—lui y & ie y) olul de relat definit este utilizabil doar pentra propositit en structuri simple, dar poate fi extins. i OO TT aey x propozi 3. Substit ia relafiet ,,APPEND” ‘Wehnica de inlocuire a relatici APPEND” cu diferent, dintro 2 liste poate fy folosita in orice definite in care relatia “APPEND” este folostt Pett a genera toate solutiile rezaltate din divizarea unei liste sam peur a alipi 2 liste generate, de alte conditis mu relagiel “Git — im” 2 Tine returneazao reprezentare generali a diferenfei unel jperechi de liste, in ordine inverst y nv (Gy) ») i inv (@X) if nv (@(

You might also like