私は、関数を取り込んで変換するためのリストを受け取るOCamlにtransformの形式のフォームを書いています。コンパイルされず、型が一致しないと主張するので、型チェックの点でパターンマッチングで何かが間違っているとわかっていますが、私のケースで何が間違っているのか分かりません。 コンパイルしようとすると関数の名前の下に実際の宣言エラーが表示されます。OCaml関数と部分アプリケーションを理解する
let rec convert (fun: 'b -> 'c option) (l: 'b list) : 'c list =
begin match l with
| [] -> []
| h::tl -> if f h = Some h then h :: convert f tl
else convert f tl
end
私は以下のテストを書いています。これは機能が正しく動作するようにするために渡す必要があります。
let test() : bool =
let f = func x -> if x > 3 then Some (x + 1) else None in
convert f [-1; 3; 4] = [5]
;; run_test "Add one" test
エラーは私の2番目のパターンマッチのどこかにあると確信しています。
1.は何だろう、提案していただきありがとうございます。このエラーは、最初の行にある関数convertの名前に下線を引いています。 2.あなたがマッチf hと言ったら、パターンマッチをh :: tlに置き換えることを意味しますか?または、関数の2行目の 'bリストlとの一致?ありがとうございました。 – rubyquartz
1.次のように、エラーメッセージも表示されます。https://ocaml.org/learn/tutorials/common_error_messages.htmlそうしないと、エラーメッセージが非常に便利なので、これを最初に修正する必要があります。私は答えを(不完全に、あなたがそれを終わらせようとすると良いから)広げた。 –