Programare Logica

Click here to load reader

  • date post

    23-Jun-2015
  • Category

    Documents

  • view

    1.078
  • download

    11

Embed Size (px)

Transcript of Programare Logica

Programare Logic aAdrian Crciun a January 11, 2010

1

CuprinsI O introducere Prolog n 66 6 7 8 8 8 9 11 14 15 16 16 16 17 17 18 19 20 22 22

1 Preliminarii 1.1 Paradigme de progamare traditionale . . . . . . . . . . . . . . . . 1.2 Programarea logic . . . . . . . . . . . . . . . . . . . . . . . . . . a 2 Prolog: introducere 2.1 Idei de baz . . . a 2.2 Fapte . . . . . . 2.3 Interogri (tinte) a 2.4 Reguli . . . . . . 2.5 Sumar . . . . . . 2.6 De citit, exercitii informal a . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

3 Sintax i structuri de date as 3.1 Termeni . . . . . . . . . . 3.1.1 Constante . . . . . 3.1.2 Variabile . . . . . 3.1.3 Structures . . . . . 3.2 Operatori . . . . . . . . . 3.3 Unicare/Potrivire . . . . 3.4 Aritmetica Prolog . . . n 3.5 Sumar . . . . . . . . . . . 3.6 De citit i exercitii . . . . s

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

4 Structuri de date 22 4.1 Structuri de date reprezentate prin arbori . . . . . . . . . . . . . 22 4.2 Liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 5 Recursie 5.1 Introducere . . . . . . 5.2 Mapare recursiv . . . a 5.3 Comparatie recursiv . a 5.4 Imbinarea structurilor 5.5 Acumulatori . . . . . . 5.6 Structuri cu diferent a 5.7 De citit . . . . . . . . 28 28 29 30 31 31 33 37 38 38 39 41 47

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

6 Revenirea (backtracking) i predicatul de tiere (!) s a 6.1 Comportamentul la revenire (backtracking) . . . . . . . . 6.2 Predicatul de tiere(!) . . . . . . . . . . . . . . . . . . . . a 6.3 Situatii comune pentru folosirea predicatului de tiere (!) a 6.4 De citit . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . .

. . . .

. . . .

. . . .

2

7 Prolog Ecient 7.1 Gndire declarativ i gndire procedural a as a a 7.2 Restrngerea spatiului de cutare . . . . . a a 7.3 Lsati unicarea s lucreze . . . . . . . . a a 7.4 elegerea mecanismului de jetoane . . . Int 7.5 Recursie nal . . . . . . . . . . . . . . . a 7.6 Folosirea indexrii . . . . . . . . . . . . . a 7.7 Cum se documenteaz programele Prolog a 7.8 De citit i alte exercitii . . . . . . . . . . . s

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

48 48 49 49 50 50 52 53 53

8 Operatii de Intrare/Ieire cu Prolog s 55 8.1 Stilul Edinburgh pentru intrare/ieire . . . . . . . . . . . . . . . 55 s 8.2 Intrare/ieire standard ISO . . . . . . . . . . . . . . . . . . . . . 58 s 8.3 De citit i exercitii . . . . . . . . . . . . . . . . . . . . . . . . . . 60 s 9 Denirea de operatori noi 61 9.1 De citit i exercitii . . . . . . . . . . . . . . . . . . . . . . . . . . 62 s

II

Bazele teoretice ale programrii logice a. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

6363 63 66 68 70 71 71 71 72 74 77 78 78 80 81 84

10 Logic a 10.1 Logica predicatelor (de ordinul ai) nt 10.2 Teorema lui Herbrand . . . . . . . . 10.3 Form clauzal a formulelor . . . . . a a 10.4 De citit i exercitii . . . . . . . . . . s 11 Rezolutie 11.1 Rezolutie fr variabile aa 11.2 Substitutii . . . . . . . 11.3 Unicare . . . . . . . . 11.4 Rezolutia . . . . . . . 11.5 De citit i exercitii . . s 12 Programare Logic a 12.1 Formule ca programe 12.2 Clauze Horn . . . . . 12.3 SLD rezolutie . . . . 12.4 De citit i exercitii . s

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

III

Tehnici Avansate de Programare Logic a

85

3

13 Limbaj obiect, metalimbaj (inc.) 13.1 Ce este metalimbajul . . . . . . . . . . . . . . . . . . . . 13.2 Un autointerpretor Prolog reprezentare fr variabile n aa 13.3 Un autointerpretor Prolog reprezentare cu variabile . n 13.4 clause/2 . . . . . . . . . . . . . . . . . . . . . . . . . . 13.5 De citit . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Gramatici de clauze denite - GCD (inc.) 14.1 Problema parcurgerii . . . . . . . . . . . . . . . 14.2 Folosirea listelor de diferente pentru parcurgere 14.3 Contexte . . . . . . . . . . . . . . . . . . . . . . 14.4 GCD Prolog . . . . . . . . . . . . . . . . . . n 14.5 De citit . . . . . . . . . . . . . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

85 85 85 85 85 85 86 86 86 86 86 86

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

15 Programare Logic cu Constrngeri (inc.) a a 87 15.1 De citit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

4

Programare logic: privire de ansamblu aPlanul cursului Partea I: O introducere limbajul de programare logic Prolog. Se bazeaz n a a mare parte pe [Mellish, Clocksin 1994]. n Partea II: Bazele teoretice ale programrii logice. Se bazeaz pe capitolele a a corespunztoare din [Ben-Ari, 2001] i [Nilsson, Maluszynski, 2000]. a s Partea III: Tehnici avansate programarea logic/PrologAdvanced topics in n a logic programming/Prolog. Se bazeaz pe capitolele corespunztoare din a a [Ben-Ari, 2001] i [Nilsson, Maluszynski, 2000]. s

5

Partea I

O introducere Prolog n11.1

PreliminariiParadigme de progamare traditionale

Programarea mainii Von Neumann s Maina (arhitectura) von Neumann se caracterizeaz prin: s a

un spatiu de memorie uniform, o unitate de procesare cu regitri. s Un program pentru maina von Neumann este o secvent de instructiuni s a pentru

micarea datelor s ntre memorie i regitri, s s efectuarea de operatii aritmetice i logice s ntre regitri, s control, etc. Majoritatea limbajelor de programare (cum ar C, C++, Java, etc.) sunt inuentate i au fost concepute pentru arhitectura von Neumann. s

Asemenea limbaje de programare se folosesc de caracteristicile aceastei arhitecturi pentru a mbunti ecienta programelor. a at Observatia de mai sus este una netrivial, i a dus la o separare a a s activitilor programare (criza software): at n* gsirea de solutii pentru probleme (folosind rationamentul matenda ingmatic), * implementarea solutiilor ntr-un limbaj de programare (activitate ce poate deveni aproape trivial dar laborioas). a a

O alternativ pentru maina von Neumann a s Cum ar dac programarea ar parte a rezolvrii problemelor . . . a a adic s se scrie programe concomitent cu rezolvarea problemelor . . . a a obtinnd astfel prototipuri rapide? a Programarea logic este derivat dintr-un model abstract diferit de o reo a a rganizare/abstractizare a mainii von Neumann. s programarea logic In a

program = multime de axiome, calculul = o demonstratie constructiv a unei formule obiectiv. a 6

1.2

Programarea logic a

Programarea logic: istoric a Programul lui David Hilbert ( nceputul secolului 20): propunea formalizarea matematicii folosind o multime de axiome nit, complet i consitent. a as a Teoremele de incompletitudine ale lui Kurt Gdel (1931): orice teorie o continnd arianytmetica nu-i poate demonstra propria consistent. a s a Rezultate de indecidabilitate stabilite de Alonzo Church and Alan Turing (independent, 1936): general nu exist procedee mecanice pentru a n a decide adevrul. a Alan Robinson (1965): metoda rezolutiei pentru logica de ordinul ai nt (rationament mecanic logica de or