Setul 3

Exercițiul 1: Ce face funcția ?

Când scriem cod, trebuie să putem urmări ce face. Astfel putem arăta fie că el face ce trebuie, fie să găsim unde e greșeala.

Pentru următoarele două funcții argumentați cât mai riguros și convingător (ideal: prin inducție după numărul de elemente al listei) ce rezultat produc.

let rec what1 = function | [] -> [] | h :: t -> h :: what1 t let what2 lst = let rec w2 r = function | [] -> [] | h :: t -> w2 (h :: r) t in w2 [] lst

Exercițiul 2: Scrieți o funcție care ia ca parametri o listă și un element și returnează lista în care elementul e plasat după toate elementele listei inițiale. Implementați funcția

a) recursiv

b) folosind List.fold_right

Exercițiul 3 (opțional) Scrieți o funcție care returnează lista tuturor numerelor prime cel mult egale cu parametrul întreg n.

Scrieți întâi o funcție ajutătoare care ia un număr și o listă de numere (ordonate crescător) și care determină dacă numărul se împarte la vreunul din elementele listei.

(Dacă știți că lista e ordonată crescător, vă puteți opri și înainte de sfârșitul listei. Când?)

Scrieți apoi funcția cerută, verificând pe rând numerele în ordine crescătoare, și acumulând într-o listă (parametru suplimentar) toate numerele prime găsite.