Int列表到int OCaml

时间:2013-02-01 03:31:53

标签: ocaml

我是OCaml的新手,所以我正在学习基础知识。我正在编写一个函数来确定列表是否包含给定的整数。

let rec int_member (x: int) (l: int list) : bool 
begin match l with
| [] -> false
| hd :: rest -> x = hd || int_member rest x
end

作为测试案例......

let test (): bool =
(int_member 1 [1;2;3]) = true
;; run_test "contains 1 [1;2;3]" test

我收到一条错误消息,说“此表达式具有类型int列表,但表达式的类型为int”。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

如果你看看你的递归调用,你应该看到你没有正确地传递参数!否则这段代码非常好。 (我发现缺少=,并且使用beginend在这里不是非常惯用的OCaml。你可以将它们排除在外。)

答案 1 :(得分:1)

  

int_member rest x

int_member的第一个参数应为int。你传递int list作为第一个参数。这就是错误消息所抱怨的内容。

你只需改变参数的顺序。

PS:代码中的begin ... end是多余的。