練習問題 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
カテゴリー: OCaml パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください