Desfășurare cursuri și laboratoare
- Curs
- Laboratoare Andrei Arusoaie (vineri, 08h00 - 12h00)
- Laboratoare Ștefan Ciobâcă (joi, 18h00 - 20h00; vineri, 14h00-16h00)
Cursul de Programare Funcțională se va desfășura on-site în fiecare joi, de la ora 16h00, în sala C112.
Laboratorul are loc on-site, în sala C412.
Laboratorul are loc on-site, în sala C401.
Programare Funcțională 2022-2023 (semestrul de vară)
- Notare
- Evaluare pe parcurs (rezolvarea în timpul laboratorului a fișelor de exerciții de la fiecare laborator): maxim 20p / semestru (maxim 2p / laborator).
- Test final: maxim 80p.
- Reexaminare: test de maxim 80p.
- Testul final urmărește următoarele obiective de invățare:
- 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.
- Nota finală se calculează prin împărțirea punctajului final la 10 și rotunjire la cel mai apropiat întreg.
- În Săptămâna 8 vom avea o simulare de examen.
- 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
Laborator: PDF. Curs: ghci, hs. Instalare: e recomandat să instalați mediul de lucru folosind ghcup. Întrebări: Pe canalul #general în Discord.Săptămâna 2 - Efecte secundare, transparență referențială, pattern matching, funcții recursive
Laborator: PDF. Curs: ghci, hs, PDF.Săptămâna 3 - Tipuri algebrice de date
Laborator: PDF. Curs: ghci, hs, PDF.Săptămâna 4 - Funcții de ordin superior
Laborator: PDF. Curs: ghci, hs, PDF.Săptămâna 5 - Clase de tipuri
Laborator: PDF. Curs: ghci, hs, PDF.Săptămâna 6 - Polimorfism. Evaluare leneșă.
Laborator: PDF. Curs: ghci, hs, PDF.Săptămâna 7 - Monada IO.
Laborator: PDF. Curs: ghci, hs.Săptămâna 8 - Simulare examen
Săptămâna 9 - Module. Instrumentul stack. Property-based Testing
Laborator: PDF. Curs: ghci, hs.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
Curs: ghci, hs (part 1), hs (part 2).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 1:
import Prelude hiding (Left, Right) data Tree = Node Int [Tree] deriving (Show, Eq) data Dir = Down | Right deriving (Show, Eq) t = Node 10 [Node 3 [], Node 4 [Node 1 [], Node 2 [], Node 22 [], Node 33[] ], Node 5 [], Node 6 []] atPos :: [Tree] -> [Dir] -> Int
Hint 2:> atPos [t] [Down, Right, Down, Right, Right] 22
Hint 3:goDown :: ([Tree], [Crumb]) -> ([Tree], [Crumb]) goRight :: ([Tree], [Crumb]) -> ([Tree], [Crumb]) change :: Int -> ([Tree], [Crumb]) -> ([Tree], [Crumb]) goBack :: ([Tree], [Crumb]) -> ([Tree], [Crumb])
Săptămâna 11 - Lambda calcul netipizat.
Curs: PDF. Laborator: PDF.Săptămâna 12 - Codări Church.
Laborator: PDF.Săptămâna 13 - Strategii de evaluare în lambda-calcul.
Curs: PDF. Laborator: PDF.Săptămâna 14 - Recapitulare (laborator).
Laborator: PDF.