Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
pp:l07 [2019/04/22 11:18] dmihai |
pp:l07 [2019/05/06 11:41] (current) dmihai [Recommended Reading] |
||
---|---|---|---|
Line 7: | Line 7: | ||
==== 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 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]] |