1

リストに偶数の整数がすべて含まれている場合は true を返し、含まれていない場合は false を返す単純な OCaml プログラムを作成しようとしています。

let rec allEven l = 
List.hd l mod 2 = 0 && allEven (List.tl l);;

コードを入力してもエラーは発生しませんでした。しかし、allEven [2;3] のような偶数で始まるリストを入力すると、エラー メッセージ "Failure "hd"" が表示されます。理由はよくわかりません。ありがとう!!

4

1 に答える 1

5

List.hd は、空のリストで Failure "hd" を発生させます。関数を修正するには、パターン マッチングを使用します。

let rec allEven l = 
  match l with
  | [] -> true
  | h::t -> if h mod 2 = 1 then false else allEven t  

また、OCaml のモジュロ演算子は「%」ではなく「mod」です。

于 2012-09-19T03:01:03.370 に答える