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 [2018/04/23 19:44]
sergiu
pp:l07 [2019/05/06 11:41] (current)
dmihai [Recommended Reading]
Line 1: Line 1:
-===== Laborator 7 - Prolog: Introducere =====+===== Prolog: Introducere ===== 
 + 
 +Scopul laboratorului:​ 
 + 
 +  * Familiarizarea studenților cu limbajul Prolog 
 ==== Despre Prolog ==== ==== Despre Prolog ====
  
-Prolog este un limbaj de programare ​centrat ​pe un set mic de mecanisme de baza(e.g. pattern-matching,​ backtracking). ​Desi setul de mecanisme de baza este limitat, Prolog este un limbaj foarte puternic ​si 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 128: Line 139:
 </​code>​ </​code>​
 De ce prima data obtinem **true**, iar dupa aceea **false**? De ce prima data obtinem **true**, iar dupa aceea **false**?
-==== Exercitii liste & diverse ==== 
-  - Definiti predicatul ''​firstTwo(X,​Y,​L)''​ care leaga variabilele ''​X'',​ ''​Y''​ la primele doua elemente din lista ''​L'',​ daca acestea exista. 
-  - Definiti predicatul ''​notContains(E,​L)''​ care verifica daca elementul la care este legat ''​E''​ nu exista in lista ''​L''​. 
-     * Poate acest predicat sa fie folosit pentru a genera toate elementele care nu sunt in ''​L''?​ Justificati raspunsul. 
-  - Definiti predicatul ''​unique(L1,​L2)''​. ''​L2''​ este lista ''​L1''​ fara elemente duplicate. 
-  - Definiti predicatul ''​listOnly(L1,​L2)''​. ''​L2''​ este lista ''​L1''​ care contine doar elementele de tip lista. Exemplu: ''​listOnly([1,​[2,​3],​4,​[5],​6],​ [ [2,​3],​[5]]).''​ 
-  - Implementati ''​insertionSort''​ in Prolog. 
-      * Idenficati predicatele necesare, aritatea fiecaruia, variabilele care reprezinta input-ul, respectiv output-ul. 
  
-==== Arbori ​==== +==== Exerciții ​====
-  - Stabiliti o conventie de reprezentare pentru arbori. Ilustrati conventia in Prolog. Exemplu: ''​T=...''​. +
-  - Implementati predicatele ''​size(T,​S)''​ si ''​height(T,​H)''​. +
-  - Definiti predicatul ''​flatten(T,​L)''​ unde ''​T''​ este un arbore.+
  
-==== Reprezentarea datelor in Prolog ==== +=== I. Liste === 
-  - Stabiliti o conventie de reprezentare pentru expresii generate de gramatica de mai josurmarind acceeasi abordare ca la arbori: + 
-<​code>​ +  - Definiți predicatul ''​firstTwo(LX, Y)''​ care leagă variabilele ''​X'',​ ''​Y'' ​la primele două elemente din lista ''​L'',​ dacă acestea exista. 
-   <​expr>​ ::= <​valoare>​ | <​variabila>​ | <​expr>​ + <​expr>​ | <​expr> ​<​expr>​  +  - Definiți predicatul ''​notContains(E,​ L)'',​ care verifică dacă elementul la care este legat ''​E'' ​**nu există** in lista ''​L''​. 
-   <​variabila>​ ::= string +  - Definiți predicatul ​''​unique(L1L2)''​''​L2''​ este lista ''​L1'' ​fără elemente duplicate. 
-   <​valoare>​ ::= orice +  - Definiți predicatul ​''​listOnly(L1,​ L2)''​. ​''​L2''​ este lista ''​L1''​ care conține doar elementele de tip listă. Exemplu: ''​listOnly([1,​[2,​3],​4,​[5],​6],​ [ [2,​3],​[5]]).''​ 
-</​code>​ +  - Implementati ''​insertionSort''​ in Prolog. 
-  - Scrieti un predicat ​''​eval(Expr,R)'' ​unde ''​R''​ este rezultatul evaluarii lui ''​Expr''​. ''​Expr'' ​**nu contine** variabile+      * Idenficati predicatele necesare, aritatea fiecăruia, variabilele ​care reprezinta input-ul, respectiv output-ul.
-  - Scrieti un predicat ​care permite evaluarea unei expresii ce contine variabile.+
  
 +=== II. Arbori ===
  
-==== Resurse ​(functii matematice==== +  - Stabiliți o convenție de reprezentare pentru arbori. Ilustrați convenția in Prolog. Exemplu: ''​T=...''​. 
-  ​* [[http://​www.swi-prolog.org/​man/​arith.html|Functii utile in Prolog]] +  - Definiți predicatul ''​size(T, S)'',​ unde ''​T''​ este un arbore, iar ''​S''​ numărul de noduri. 
-  ​[[http://www.learnprolognow.org/lpnpage.php?​pageid=onlineTutorial Prolog]]+  - 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 ====
  
 +  * [[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 - 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 - 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-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-htmlch4|Learn Prolog Now! - Chapter 4 Lists]]