例外処理

 

JavaC++のような例外処理の機能もあります(実は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

 

次へ進む