OCaml中的模式匹配

时间:2013-03-09 12:15:34

标签: pattern-matching ocaml

我有一个(string*int) list类型的OCaml列表。 我必须遍历列表并检查int值。如果对于列表中的所有元素,属性int>=0成立,那么列表是“正常”,否则,如果它在任何一个实例上失败,那么我必须返回“失败”。 为此,我做了以下尝试

let rec check tlist = match tlist with
[] -> print_string "finished"
|(s,i)::tail -> if i < 0 then print_string "fail" else check tail 

从解释器运行它时,我收到一个警告,模式匹配并非详尽无遗。 此外,当我在以下输入类型

中运行它时
let z = [("ask",1);("tell",2);("three",3);("goal",-4)] ;;

它按预期返回失败但是

let z = [("ask",1);("tell",2);("three",3);("goal",4)] ;; ,

它返回异常:

Match_failure ("//toplevel//", 7, -22).

如何解决这个问题?

编辑:此外,还有另一部分问题。我必须确保列表中不重复字符串s。如何去做?

1 个答案:

答案 0 :(得分:2)

您发布的代码很好,不会产生任何警告,并且可以为您说的输入工作。

如果你想改进它,你应该尝试将算法逻辑和输入/输出分开以使事情更灵活:让函数返回布尔值而不是unit