Desfășurare cursuri și laboratoare
- Curs
- Laboratoare Andrei Arusoaie (joi, 08h00 - 12h00)
- Laborator Ștefan Ciobâcă (joi, 16h00 - 20h00)
Cursul de Programare Funcțională se va desfășura în fiecare Miercuri, de la ora 18h00, pe platforma Webex.
Laboratorul are loc on-site, în sala C412. În cazul în care nu puteți participa în fizic, vă puteți conecta folosind platforma Webex:
Laboratorul are loc on-site, în sala C411. În cazul în care nu puteți participa în fizic, vă puteți conecta folosind platforma Webex:
Programare Funcțională 2021-2022 (semestrul de vară)
- Notare
- Evaluare pe parcurs (fișele de exerciții de la fiecare laborator): maxim 50p / semestru (maxim 5p / temă de laborator).
- Pentru promovare este necesară îndeplinirea standardului
minim de performanță (simultan toate cele 4 criterii de mai jos):
- Capacitatea de a defini funcții recursive de dificultate medie (e.g., funcții de sortare, funcții cunoscute de la matematică);
- Capacitatea de a proiecta și defini tipuri algebrice de date de dificultate medie (e.g., pentru reprezentarea unor expresii aritmetice sau logice);
- Capacitatea de a utiliza și de a înțelege funcții de ordin superior (e.g., map, filter, reduce) în contexte de dificultate medie;
- Capacitatea de a face calcule folosind regula de beta-reducere în lambda-calcul.
- Stabilirea îndeplinirii celor 4 criterii se face la examenul final, care va fi organizat on-site.
- Examenul va fi organizat sub forma a 8 întrebări de dificultate medie (2 întrebări / criteriu). Un criteriu este considerat atins dacă rezolvarea a cel puțin uneia dintre cele două întrebări aferente este convingătoare. Pentru atingerea unui criteriu nu este nevoie de un răspuns perfect, ci doar convingător. Examenul va fi construit astfel încât să fie practic imposibil să nu fie atinse criteriile de către studenții care lucrează toate fișele de laborator cu bună-credință.
- Nota finală se calculează astfel:
- Dacă nu au fost îndeplinite simultan toate cele 4 criterii: numărul de criterii îndeplinite + 1.
- Dacă au fost îndeplinite simultan toate cele 4 criterii: în funcție de distribuția statistică a punctajelor (note întregi, nu mai mici de 5 și nu mai mari de 10).
- În Săptămâna 8 vom face o simulare de examen (doar primele 3 criterii).
- Contact
- Curs: Ștefan Ciobâcă - stefan.ciobaca@gmail.com
- Laborator: Andrei Arusoaie - andrei.arusoaie@uaic.ro
Referințe Bibliografice
Plan de Lucru
-
Săptămâna 1 - Introducere
Fișa de exerciții pentru laborator
Săptămâna 2 - Efecte secundare, transparență referențială, pattern matching, funcții recursive
Interacțiunea cu GHCI din timpul cursului
Codul sursă din timpul cursului
Fișa de exerciții pentru laborator
Săptămâna 3 - Tipuri algebrice de date
Cod sursă scris în timpul cursului
Interacțiunea cu GHCI din timpul cursului
Fișa de exerciții pentru laborator
Săptămâna 4 - Funcții de ordin superior
Cod sursă scris în timpul cursului
Interacțiunea cu GHCI din timpul cursului
Fișa de exerciții pentru laborator
Săptămâna 5 -Clase de tipuri
Cod sursă scris în timpul cursului
Interacțiunea cu GHCI din timpul cursului
Fișa de exerciții pentru laborator
Săptămâna 6 - Polimorfism. Evaluare leneșă.
Cod sursă scris în timpul cursului
Interacțiunea cu GHCI din timpul cursului
Fișa de exerciții pentru laborator
Opțional: When is lazy evaluation useful? - Stack Overflow.
Opțional: Lazy evaluation illustrated.
Săptămâna 7 - Monada IO.
Cod sursă scris în timpul cursului
Interacțiunea cu GHCI din timpul cursului
Fișa de exerciții pentru laborator
Suport de curs: Capitolul 9 din "Learn You a Haskell for Great Good!"
Săptămâna 8 - Simulare examen
Săptămâna 9 - Module. Instrumentul stack. Property-based Testing
Folder cu fisierele scrise in timpul cursului
Fișa de exerciții pentru laborator
Săptămâna 10 - Topici avansate 1 (e.g., structuri de date pur funcționale, rezolvarea problemelor în stil funcțional)
Suport de curs: Capitolul 14 din LYAHFGG
Cod sursă scris în timpul cursului (partea 1)
Cod sursă scris în timpul cursului (partea 2)
Interacțiunea cu GHCI din timpul cursului
Notitele de pe tableta: pdf.
Fișa de exerciții pentru laborator:
- Arbori binari: Modificati functiile change, goLeft, goRight si goUp pentru a intoarce Maybe Zipper.
- Folositi >>= in cateva exemple de inlantuiri de apeluri de goLeft/goUp/goRight/change.
- Liste: Modificati functiile change, goFwd, goBwd pentru a intoarce Maybe Zipper.
- Folositi >>= in cateva exemple de inlantuiri de apeluri.
- Proiectati un Zipper pentru arbori in care nodurile au un numar arbitrar de subarbori (nu doar doi: stanga si dreapta). [Hint: veti combina ideile de la zipper pentru liste cu cele de la zipper pentru arbori]
Săptămâna 11 - Lambda calcul netipizat.
Fișa de exerciții pentru laborator
Săptămâna 12 - Codări Church.
Fișa de exerciții pentru laborator
Săptămâna 13 - Strategii de evaluare în lambda-calcul.
Fișa de exerciții pentru laborator
Săptămâna 14 - Lambda calcul simplu tipizat.