Come fare la sommatoria in Ocaml
Nel linguaggio Ocaml la sommatoria si realizza tramite una semplice funzione ricorsiva
let rec sommatoria (f,n,m) =
if n>m then 0
else f(n) + sommatoria(f,n+1,m)
Dove n e m sono rispettivamente l'indice iniziale e finale della sommatoria.
La funzione richiama se stessa per m-n volte.
E' utile per calcolare una serie numerica in Ocaml o, più in generale, secondo il paradigma di programmazione funzionale.
Codice alternativo
Posso realizzare la stessa funzione in modo più efficiente tramite la tail recursion
let rec sommatoria(f,n,m,s) =
if n>m then s
else sommatoria(f,n+1,m,(s+f(n)));;
Questo codice raggiunge lo stesso risultato impegnando un minore spazio di memoria, perché le somme parziali sono trasmesse con un parametro aggiuntivo (s) durante la ricorsione.
Al termine dell'ultima ricorsione viene restituita la sommatoria senza fare altri calcoli.
Un esempio pratico
In questo script definisco la funzione raddoppia che calcola il doppio di un numero.
Poi definisco la funzione ricorsiva della sommatoria.
let radodoppia x = 2*x
let rec sommatoria (f,n,m) =
if n>m then 0
else f(n) + sommatoria(f,n+1,m)
Ora calcolo la sommatoria da 1 a 5 della funzione raddoppia
sommatoria(raddoppia, 1, 5)
Il risultato è
- : int = 30
che coincide con la serie parziale della funzione
In questo modo posso calcolare una serie matematica tramite un linguaggio funzionale come Ocaml.
E così via.