我尝试编写一个简单的OCaml程序,如果列表包含所有偶数整数则返回true,如果不包含则返回false。
let rec allEven l =
List.hd l mod 2 = 0 && allEven (List.tl l);;
当我输入代码时,它没有给我任何错误。但每当我输入一个以allEven [2; 3]之类的偶数开头的列表时,它会给出错误消息“Failure”hd“”。不确定为什么。谢谢!
答案 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”而不是“%”