OCaml错误失败"hd"

otc*_*com 1 ocaml functional-programming

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

let rec allEven l = 
List.hd l mod 2 = 0 && allEven (List.tl l);;
Run Code Online (Sandbox Code Playgroud)

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

小智 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  
Run Code Online (Sandbox Code Playgroud)

此外,OCaml中的模运算符是"mod"而不是"%"

  • 每当你写“if ... then false else ...”之类的东西时,你应该缴纳5美元的裁员税。;) 此外,“let allEven = List.for_all (fun x -> x mod 2 = 0)”可能是定义此函数的更好方法。 (2认同)