Devo scrivere un programma che fornisca in uscita una tupla con: min e max di una lista non vuota e il valore che appare più spesso. In particolare:Elemento min/max e più frequente di una lista
min_max [1;0;-1;2;0;-4] ==> (-4; 2)
min_max: int list -> (int * int)
mode [-1;2;1;2;5;-1;5;5;2] ==> 2
mode: int list -> int
Questo è il codice che ho scritto per max (min è quasi uguale), ma come posso fare per ricevere come output una tupla con due valori?
let rec max_list xs =
match xs with
| [] -> failwith "xs" "Empty list"
| [x] -> x
| x1::x2::xs' -> max_list((max2 x1 x2)::xs');;
Come nota a margine; il tuo 'max_list' sembra un po 'complicato per il suo scopo; potrebbe essere più semplice passare il massimo corrente al resto della lista e aggiornarlo se la testa attuale è maggiore. o senza passarlo in giro; basta restituire il massimo tra la testa attuale e la max_list della coda – Sehnsucht