Si definiscano e testino in Caml le funzioni specificate -------------------------------------------------------- minpair (a, b) = il piu' piccolo tra a e b length l = lunghezza di una lista add n = la funzione che aggiunge n ad un intero curry, uncurry (col significato visto a lezione) compose f g = composizione funzionale di f e g stringcopy n s = s ^ ... ^ s (n volte) (definizione diretta o usando parametro di accumulazione) sum g n = la sommatoria per i da 0 a n di g i sumsquare = la sommatoria per i da 0 ad n di i*i forloop n body s = esegue n volte body a partire da s stringcopy utilizzando forloop upto n, m = la lista degli interi da n ad m sumlist l = la somma degli elementi di l prodlist l = il prodotto degli elementi di l doublelist l = la lista dei doppi degli elementi di l copy n e = la lista formata da n copie di e member l e = testa se e appartiene ad l flatten [l_1; ...; l_n] = l_1 @ ... @ l_n drop n l = elimina i primi n elementi di l filter p l = la lista degli elementi di l su cui vale il predicato p poslist l = gli elementi positivi di una lista di interi exists p l = testa se in l c'e' almeno un elemento su cui vale p all p l = testa se su ogni elemento di l vale p front n l = i primi n elementi di l revonto l l' = (il rovescio di l') @ l rev utilizzando revonto combine ([x_1;...;x_n], [y_1;...;y_n]) = [(x_1,y_1);...;(x_n,y_n)] sublists l = la lista di tutte le sottoliste di l Variante: la lista di tutte le sottoliste formate di elementi contigui prefixes l = la lista dei prefissi (parti iniziali) di l insert leq e l = inserisce l'elemento e nella lista (assunta ordinata con l'ordine leq) al posto giusto insertsort leq l = la versione ordinata di l, inserendo via via gli elementi di l a partire dalla lista vuota con insert definita sopra quicksort leq = la versione ordinata di l, con l'algoritmo di quicksort (sia l = e :: l'; si divide l' in due liste low e high, con gli elementi rispettivamente minori e maggiori di e; si richiama ricorsivamente quicksort su low e high) split p l = produce due liste, una formata da tutti gli elementi di l che soddisfano p, una formata da quelli che non soddisfano p compose [f_1; ...; f_n] = composizione funzionale di f_1, ..., f_n (definizione diretta, usando parametro di accumulazione, usando un iteratore)