Logică și structuri discrete - Tema 3

Tema se trimite prin Campus Virtual UPT până miercuri ora 22, împreună cu exercițiile date ca temă după laborator.

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.


Marius Minea
Last modified: Tue Oct 3 15:15:00 EEST 2016