1

我尝试编写一个简单的 OCaml 程序,如果 a 列表包含所有偶数整数,则返回 true,否则返回 false。

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

当我输入代码时,它没有给我任何错误。但是,每当我输入一个以偶数开头的列表时,例如 allEven [2;3],它都会给我错误消息“失败“hd””。不太清楚为什么。谢谢!!

4

1 回答 1

5

List.hd 将在空列表上引发故障“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 回答