Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
pp:l07 [2019/04/22 11:20]
dmihai [Despre Prolog]
pp:l07 [2019/05/06 11:41] (current)
dmihai [Recommended Reading]
Line 9: Line 9:
 Prolog este un limbaj de [[https://​en.wikipedia.org/​wiki/​Logic_programming|programare logică]], bazat pe un set mic de mecanisme de baza (e.g. pattern-matching,​ backtracking). Deși setul de mecanisme de baza este limitat, Prolog este un limbaj foarte puternic și flexibil. Prolog este un limbaj de [[https://​en.wikipedia.org/​wiki/​Logic_programming|programare logică]], bazat pe un set mic de mecanisme de baza (e.g. pattern-matching,​ backtracking). Deși setul de mecanisme de baza este limitat, Prolog este un limbaj foarte puternic și flexibil.
  
 +==== SWI-Prolog ====
 +
 +Există mai multe implementări ale limbajului Prolog. Noi vom folosi SWI-Prolog, disponibil [[http://​www.swi-prolog.org/​Download.html|aici]],​ sau puteți instala pachetul ''​swi-prolog''​.
 +
 +Vom lucra în modul interactiv, care ne permite să apelăm funcții din consolă și să vedem rezultatul lor. Pentru modul interactiv, rulați ''​swipl''​.
 + 
 ==== Structura unui program Prolog ==== ==== Structura unui program Prolog ====
  
Line 138: Line 144:
 === I. Liste === === I. Liste ===
  
-  - Definiți predicatul ''​firstTwo(X,​Y,L)''​ care leagă variabilele ''​X'',​ ''​Y''​ la primele două elemente din lista ''​L'',​ dacă acestea exista.+  - Definiți predicatul ''​firstTwo(L, X, Y)''​ care leagă variabilele ''​X'',​ ''​Y''​ la primele două elemente din lista ''​L'',​ dacă acestea exista.
   - Definiți predicatul ''​notContains(E,​ L)'',​ care verifică dacă elementul la care este legat ''​E''​ **nu există** in lista ''​L''​.   - Definiți predicatul ''​notContains(E,​ L)'',​ care verifică dacă elementul la care este legat ''​E''​ **nu există** in lista ''​L''​.
   - Definiți predicatul ''​unique(L1,​ L2)''​. ''​L2''​ este lista ''​L1''​ fără elemente duplicate.   - Definiți predicatul ''​unique(L1,​ L2)''​. ''​L2''​ este lista ''​L1''​ fără elemente duplicate.
Line 147: Line 153:
 === II. Arbori === === II. Arbori ===
  
-  - Stabiliți o convenție de reprezentare pentru arbori. Ilustrați ​conventia ​in Prolog. Exemplu: ''​T=...''​. +  - Stabiliți o convenție de reprezentare pentru arbori. Ilustrați ​convenția ​in Prolog. Exemplu: ''​T=...''​. 
-  - Implementati predicatele ​''​size(T,​S)'' ​si ''​height(T,​H)''​. +  - Definiți predicatul ​''​size(T,​ S)''​, unde ''​T''​ este un arbore, iar ''​S''​ numărul de noduri. 
-  - Definiti ​predicatul ''​flatten(T,​L)''​ unde ''​T''​ este un arbore. +  - Definiți predicatul ​''​height(T,​ H)''​, unde ''​T''​ este un arbore, iar ''​H''​ este numărul de niveluri
- +  - Definiți ​predicatul ''​flatten(T,​ L)''​ unde ''​T''​ este un arbore, iar ''​L''​ o listă de noduri, în [[https://​en.wikipedia.org/​wiki/​Tree_traversal#​Pre-order_(NLR)|preordine]].
 ==== Recommended Reading ==== ==== Recommended Reading ====
  
   * [[https://​mitpress.mit.edu/​books/​art-prolog-second-edition|The Art of Prolog - I. Logic Programs - 1. Basic Constructs]]   * [[https://​mitpress.mit.edu/​books/​art-prolog-second-edition|The Art of Prolog - I. Logic Programs - 1. Basic Constructs]]
   * [[https://​mitpress.mit.edu/​books/​art-prolog-second-edition|The Art of Prolog - I. Logic Programs - 2. Database Programming]]   * [[https://​mitpress.mit.edu/​books/​art-prolog-second-edition|The Art of Prolog - I. Logic Programs - 2. Database Programming]]
 +  * [[https://​mitpress.mit.edu/​books/​art-prolog-second-edition|The Art of Prolog - I. Logic Programs - 3. Recursive Programming]]
   * [[https://​mitpress.mit.edu/​books/​art-prolog-second-edition|The Art of Prolog - II. The Prolog Language - 6. Pure Prolog]]   * [[https://​mitpress.mit.edu/​books/​art-prolog-second-edition|The Art of Prolog - II. The Prolog Language - 6. Pure Prolog]]
   * [[https://​mitpress.mit.edu/​books/​art-prolog-second-edition|The Art of Prolog - II. The Prolog Language - 7. Programming in Pure Prolog]]   * [[https://​mitpress.mit.edu/​books/​art-prolog-second-edition|The Art of Prolog - II. The Prolog Language - 7. Programming in Pure Prolog]]
 +  * [[https://​mitpress.mit.edu/​books/​art-prolog-second-edition|The Art of Prolog - II. The Prolog Language - 8. Arithmetic]]
   * [[http://​www.learnprolognow.org/​lpnpage.php?​pagetype=html&​pageid=lpn-htmlse1|Learn Prolog Now! - Chapter 1 Facts, Rules and Queries]]   * [[http://​www.learnprolognow.org/​lpnpage.php?​pagetype=html&​pageid=lpn-htmlse1|Learn Prolog Now! - Chapter 1 Facts, Rules and Queries]]
   * [[http://​www.learnprolognow.org/​lpnpage.php?​pagetype=html&​pageid=lpn-htmlch2|Learn Prolog Now! - Chapter 2 Unification and Proof Search]]   * [[http://​www.learnprolognow.org/​lpnpage.php?​pagetype=html&​pageid=lpn-htmlch2|Learn Prolog Now! - Chapter 2 Unification and Proof Search]]
   * [[http://​www.learnprolognow.org/​lpnpage.php?​pagetype=html&​pageid=lpn-htmlch3|Learn Prolog Now! - Chapter 3 Recursion]]   * [[http://​www.learnprolognow.org/​lpnpage.php?​pagetype=html&​pageid=lpn-htmlch3|Learn Prolog Now! - Chapter 3 Recursion]]
   * [[http://​www.learnprolognow.org/​lpnpage.php?​pagetype=html&​pageid=lpn-htmlch4|Learn Prolog Now! - Chapter 4 Lists]]   * [[http://​www.learnprolognow.org/​lpnpage.php?​pagetype=html&​pageid=lpn-htmlch4|Learn Prolog Now! - Chapter 4 Lists]]