Eccezioni in Ocaml

Nel linguaggio Ocaml per dichiarare un'eccezione uso il costrutto exception

exception nome

Dove nome è la nuova eccezione che voglio definire.

Il nome deve iniziare con una lettera maiuscola.

Una volta creata, posso sollevare un'eccezione con il costrutto raise

raise nome

    Un esempio pratico

    Creo una funzione per calcolare il fattoriale di un numero

    let rec fattoriale = function
    0 -> 1
    | n -> n*fattoriale(n-1)

    Con i numeri positivi funziona bene

    fattoriale(3);;
    - : int = 6

    Con i numeri negativi, invece, la funzione produce un errore di stack overflow.

    fattoriale(-3);;
    Stack overflow during evaluation (looping recursion?).

    Per impedire che accada, prima dichiaro un'eccezione con il costrutto exception

    exception FattorialeNegativo;;

    Poi modifico la funzione aggiungendo un controllo sull'argomento.

    Se l'argomento è negativo, la funzione solleva l'eccezione FattorialeNegativo tramite il costrutto raise

    let rec fattoriale = function
    0 -> 1
    | n -> if n<0 then raise FattorialeNegativo
    else n*fattoriale(n-1)

    Quando uso la funzione con un argomento negativo, la funzione va subito in errore senza andare in loop, sollevando l'eccezione FattorialeNegativo.

    fattoriale(-3);;
    Exception: FattorialeNegativo

    L'eccezzione rende più intuitiva la causa dell'errore.

    E così via.

     


     

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

    FacebookTwitterLinkedinLinkedin
    knowledge base

    Ocaml