Exercițiul 1:
În C, ML, ca și în alte limbaje, ordinea de evaluare a operanzilor e precizată pentru unii operatori
(de exemplu, && și ||, de la stânga la dreapta), și neprecizată (poate fi oricare) pentru majoritatea
operatorilor binari uzuali (aritmetici, comparație, etc.).
Fie următoarea expresie
if x > 3 && x < 5 then (x + 1) * (x - 2) else (x - 4) * (x + 6)Dați etichete distincte (de exemplu litere) tuturor operatorilor din expresie. Explicați care operatori sunt sigur produc rezultatul înaintea cărora, dacă a) x = 4; b) x = 6. Calculați în ambele cazuri închiderea tranzitivă a ordinii parțiale definite.
Exercițiul 2
Scrieți o funcție care ia o listă de caractere și produce un dicționar în care fiecare caracter e asociat cu numărul aparițiilor în listă.
Indicație: parcurgeți lista cu List.fold_left și actualizați dicționarul la fiecare pas. Distingeți cazurile când caracterul e nou în dicționar sau e întâlnit prima dată.
Pentru a crea ușor liste de caractere, puteți folosi următoarea funcție care creează o listă de caractere dintr-un șir:
let explode s = let rec expl i l = if i < 0 then l else expl (i - 1) (s.[i] :: l) in expl (String.length s - 1) [];; explode "acesta este un sir";;