練習問題 7.2

整数リストの要素すべての積を返す関数 prod_list を定義しなさい。リスト要素の一つでも 0 が含まれている場合には,prod_list の適用結果は常に 0 になるので,例外処理を使用 して,0 を発見したら残りの計算を行わずに中断して 0 を返すように定義しなさい。

まずは 0 をかけるという例外を宣言しよう。

 # exception Multiple_zero;;
 exception Multiple_zero

でもって prod_list の定義。

 # let prod_list lis =
     let prod' x y = if y = 0 then raise Multiple_zero else x * y in
     try List.fold_left prod' 1 lis with
       Multiple_zero -> 0
   ;;
 val prod_list : int list -> int = <fun>

これでいいはず。

 # prod_list [1; 3; 7; 2; 9];;
 - : int = 378
 # prod_list [5; 2; 0; 8; 4];;
 - : int = 0