Definire le seguenti funzioni
('a → 'b) → 'a list → 'b list
int list → int list
('a → bool) → 'a list → 'a list
(int * float) list → (string * string) list
('a → 'b → 'b) → 'a list → 'b → 'b
('a * 'b) list → 'a list * 'b list
Risolvere i seguenti esercizi utilizzando i combinatori per liste map, filter e fold (ove conveniente).
Definire una funzione pair: ('a * 'b) list → 'a list * 'b list che trasformi una lista di coppie in una coppia di liste
Definire la funzione split : int → 'a list → 'a list * 'a list tale che split n l divida la lista l in due, di cui la prima sia lunga n.
Definire la funzione merge : 'a list → 'a list → 'a list tale che date due liste ordinate in maniera crescente restituisca una lista ordinata in maniera crescente.
Scrivere la funzione splitRev: int → 'a list → 'a list * 'a list , tale che split n l divida la lista l in due, contando n elementi a partire dal fondo. Ad esempio : splitRev 3 [1;2;3;4;5;6;7]= ([1;2;3;4],[5;6;7])
Definire la funzione count: 'a → 'a list → int che conti il numero di occorrenze di un elemento in una lista, utilizzando la funzione List.fold_right.
Definire la funzione minList : 'a list → 'a che calcoli il minimo elemento di una lista.
Definire la funzione rev: 'a list → 'a list per invertire una lista, completando il seguente pezzo di codice:let rev l = List.fold_right….
Definire le funzioni take: int → 'a list → 'a list e drop : int → 'a list → 'a list tali che take n l restituisca i primi n elementi di l e drop n l i restanti, in modo che valga la proprieta’: take n xs @ drop n xs = xs
Definire la funzione last : 'a list → 'a che restituisca l’ultimo elemento di una lista.