Functional programming OCaml错误失败“;房屋署";

Functional programming OCaml错误失败“;房屋署";,functional-programming,ocaml,Functional Programming,Ocaml,我尝试编写一个简单的OCaml程序,如果a列表包含所有偶数,则返回true;如果不包含偶数,则返回false let rec allEven l = List.hd l mod 2 = 0 && allEven (List.tl l);; 当我输入代码时,它没有给我任何错误。但每当我输入一个以偶数开头的列表,比如allEven[2;3],它就会给我错误消息“Failure”hd“。不太清楚为什么。谢谢 List.hd将在空列表上引发故障“hd”。要更正功能,请使用模式匹配:

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

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

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

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”而不是“%”

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”而不是“%”

,如果。。。如果是假的话……
或者类似的话,你应该支付5美元的解雇税另外,
让allEven=List.for_all(fun x->x mod 2=0)
可能是更好的定义此函数的方法。。。如果是假的话……或者类似的话,你应该支付5美元的解雇税另外,
let allEven=List.for_all(fun x->x mod 2=0)
可能是更好的定义此函数的方法。