1

我是 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 类型”。我怎样才能解决这个问题?

4

2 回答 2

3

如果您查看您的递归调用,您应该会发现您没有完全正确地传递参数!否则这段代码是相当不错的。(我看到一个缺失的=, 并且在这里使用beginandend不是很惯用的 OCaml。你可以把它们排除在外。)

于 2013-02-01T04:38:56.620 回答
1

int_member 休息 x

的第一个参数int_member应该是一个int. 您将 aint list作为第一个参数传递。这就是错误消息所抱怨的。

您只需切换参数的顺序。

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

于 2013-02-01T04:39:09.280 回答