我有一个 OCaml 类型的列表(string*int) list
。我必须遍历列表并检查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
在列表中不重复。该怎么做?