JavaやC++のような例外処理の機能もあります(実はMLのほうが先ですが)。exception構文で例外データ型を定義し、raiseで例外を発生、try ... with ...で例外を捕獲します。たとえば次のプログラムは、与えられた整数リストの要素をすべて掛け算しつつ、もし0があったら例外を発生して、すぐに計算を中断します。
# exception Zero ;;
exception Zero
# let rec multiply_int_list = function
[]
-> 1
| i :: l ->
if i = 0 then raise Zero else
i * multiply_int_list l ;;
val multiply_int_list : int list -> int = <fun>
# multiply_int_list [2; 3; 4] ;;
- : int = 24
# multiply_int_list [5; 0; 6] ;;
Exception: Zero.
# try
multiply_int_list [5; 0; 6]
with Zero
-> 0 ;;
- : int = 0