Come definire una funzione in OCaml

Per dichiarare una funzione nel linguaggio OCaml utilizzo la funzione Let. Ecco la sintassi:

let nomefunz = espressione ;;

Dove nomefunz è il nome della funzione da definire.

L'espressione è il contenuto della funzione.

Nota. Una funzione è una relazione tra un insieme dominio e un insieme di codominio. $$ f: A \rightarrow B $$

Un esempio pratico

Creo una funzione che raddoppia l'argomento in input (dominio).

let raddoppia x = 2*x;;

Una volta creata la funzione, posso usarla passandogli in input qualcosa, un numero, una variabile o un'altra funzione.

raddoppia(5);;

La funzione elabora l'argomento nell'espressione e restituisce in output un valore (codominio).

- : int = 10

Posso passare come argomento anche una variabile.

Ad esempio, dichiaro un valore (var) e lo utilizzo come argomento della funzione.

let var = 5;;
raddoppia(var);;

Il risultato in output è lo stesso:

- : int = 10

L'argomento della funzione può essere anche un'altra funzione.

In questo caso, OCaml elabora prima la funzione più interna e poi quella più esterna.

raddoppia(raddoppia(var))

Il risultato della funzione di funzione è

- : int = 20

La funzione interna raddoppia il valore var=5 in 10.

Quella più esterna raddoppia il valore della funzione interna (10) in 20.

L'espressione della funzione può contenere anche variabili.

let d=2;;
let raddoppia x=x*d;;
raddoppia(5);;

L'output della funzione è

- : int = 10

Esempio 2

In questo esempio definisco una funzione pari() che accetta un argomento n e restituisce un valore booleano true se n è pari o false se n è dispari.

let pari n = n mod 2 == 0;;

La funzione verifica se l'identità n mod 2 == 0 ossia se il resto della divisione per due dell'argomento ha resto zero.

Se l'identità è vera, il numero n è pari.

Qualsiasi numero pari diviso per due ha resto nullo.

pari(2);;
- : bool = true

Viceversa, se l'identità è falsa, il numero n non è pari ossia è dispari.

pari(2);;
- : bool = false

OCaml è un linguaggio a scopo statico

E' opportuno ricordarsi che OCaml è un linguaggio a scopo statico.

Che vuol dire?

Quando si dichiara una funzione, sono prese in considerazioni i valori delle variabili (o di altre funzioni) al momento della definizione.

Eventuali modifiche successive alle variabili, non modificano l'espressione della funzione.

Pertanto, l'ambiente di definizione prevale sempre sull'ambiente di applicazione.

Un esempio pratico

Definisco la funzione raddoppia usando la variabile d come fattore di moltiplicazione.

let d=2;;
let raddoppia x=x*d;;
raddoppia(5);;
let d=3;;
raddoppia(5);;

Dopo aver definito la funzione, modifico la variabile d assegnandogli il valore 3.

La funzione continua a utilizzare il valore precedente (d=2).

Ecco l'output della funzione prima e dopo la modifica alla variabile d.

- : int = 10
- : int = 10

In pratica, quando definisco la funzione con l'espressione x=x*d OCaml sostituisce la variabile con il valore 2 e utilizza x=x*2.

Quindi, qualsiasi variazione successiva alla variabile d non modifica il funzionamento della funzione raddoppia()

E così via.

 


 

Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

FacebookTwitterLinkedinLinkedin
knowledge base

Le funzioni in Ocaml