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

再帰呼び出しを見ると、引数を正しく渡していないことがわかります。そうでなければ、このコードはかなり良いです。(ここでは、欠落している=、また使用しbeginendいる、あまり慣用的なOCamlではありません。そのままにしておくことができます。)

于 2013-02-01T04:38:56.620 に答える
1

int_member rest x

の最初の引数は。int_memberである必要がありintます。int list最初の引数としてを渡します。それがエラーメッセージが不平を言っていることです。

引数の順序を切り替えるだけです。

PS:begin ... endあなたのコードのは不要です。

于 2013-02-01T04:39:09.280 に答える