OCaml错误失败“hd”

时间:2012-09-19 02:40:21

标签: functional-programming ocaml

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

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

当我输入代码时,它没有给我任何错误。但每当我输入一个以allEven [2; 3]之类的偶数开头的列表时,它会给出错误消息“Failure”hd“”。不确定为什么。谢谢!

1 个答案:

答案 0 :(得分: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”而不是“%”