• Examenul la PP va consta in implementarea unor functii, in stil functional, in limbajul Haskell.
  • Examenul se va desfasura exclusiv fizic.
  • Folosirea laptopului va fi obligatorie la examen.
  • Rezolvarea va consta intr-o submisie realizata pe Moodle, care va fi corectata folosind un tester automat. Cel putin unul din teste va fi parte din enuntul fiecarui exercitiu. Restul testelor nu va fi public.
  • Fiecare implementare va fi punctata binar.
  • Vor fi un numar de X exercitii propuse, dintre care X-Y vor fi necesare pentru obtinerea notei 10 la examen (si X-Y/2, pentru promovare). X si Y, precum si durata examenului vor fi anuntate in ziua examenului.

Urmatoarele sunt reguli OBLIGATORII pentru examen.

Veti descarca un schelet de cod ce va contine enuntul exercitiilor precum si signaturile functiilor ce trebuie implementate. Exemplu:

module Examen where
 
tokenId :: String
tokenId = undefined
 
-- daca x = 0, f intoarce 1, altfel, intoarce 0
f :: Int -> Int
f = undefined
 
-- verifica daca doua numere produc suma 2
-- Exemplu: g 1 2 = False, g 1 1 = True
g :: Int -> Int -> Int
g = undefined
  • Pentru a rezolva un exercitiu, inlocuiti definitiile f = undefined si g = undefined cu definitiile voastre.
  • Puteti folosi orice editor pt Haskell, si puteti include alte definitii ale voastre, pentru testare.
  • NU FOLOSITI DEFINITII TOP-LEVEL CARE INCEP CU: test (scriptul de testare foloseste astfel de nume).
  • Daca nu doriti sa rezolvati un exercitiu, PASTRATI DEFINITIA (undefined) DIN SCHELET.
  • Pentru ca examenul sa fie notat, solutia/fisierul vostru TREBUIE SA COMPILEZE. Daca o solutie nu functioneaza, inlocuiti-o cu undefined inainte de a o trimite.
  • NU MODIFICATI NUMELE MODULULUI SAU AL SIGNATURILOR CERUTE IN ENUNT.
  • NU UITATI SA COMPLETATI TOKEN ID-UL VOSTRU IN SOLUTIE (testerul nu va rula daca acesta lipseste).
  • Orice solutie care trece accidental testele, dar nu rezolva exercitiul in spiritul in care a fost propus, nu va fi punctata.
  • In timpul examenului, singurele aplicatii permise sunt: (i) browser cu moodle, (ii) editor, (iii) consola cu ghci. Nu aveti voie sa aveti ORICE alta aplicatie deschisa.
  • Comunicarea, prin orice mijloace, este interzisa in timpul examenului.
  • Nu puteti folosi google sau alte resurse pentru a va documenta asupra functiilor disponibile in Haskell (Aveti insa voie sa folositi orice informatie ce este furnizata de ghci).
  • Nu puteti folosi alte resurse scrise, sau rezolvari, scrise sau electronice, ale altor exercitii.
  • Timpul este o componenta importanta a examenului. Pe langa abilitatea de a produce o implementare ce trece testele, modul si viteza cu care o realizati sunt cel putin la fel de importante - ele atesta nivelul de skill de programare dobandit la acest curs, precum si stapanirea elementelor de programare functionala, care sunt focusul principal al cursului.
  • Incercati sa rezolvati acele exercitii care vi se par confortabile intai, apoi abordati-le pe cele mai grele.
  • Evitati solutiile care folosesc recursie simpla, si exploatati maxim functiile standard de ordin superior (foldl, foldr, map, zipWith, filter, compunere, etc.). Acest lucru va ajuta in special la viteza de rezolvare si la testare.
  • Majoritatea exercitiilor se rezolva in maxim 2-3 linii de cod, in functie si de stilul de formatare preferat de voi. Evitati solutii cu numar mare de linii de cod, si orientati-va spre a descopune functional problema in sub-probleme.
  • Puteti folosi orice functie disponibila in Prelude.
  • Cele mai bune exemple de exercitii asemanatoare celor pe care le veti intalni la examen sunt cele din laborator.