0
我正在寫入一種形式的OCaml轉換形式,它接受函數並接受一個列表進行轉換。我明白我的模式匹配在類型檢查方面有些問題,因爲它不會編譯並聲明類型不匹配,但我不確定我的情況究竟出了什麼問題。 當我嘗試編譯時,我收到一個實際的聲明錯誤,強調函數的名稱。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
我非常有信心這個錯誤在我的第二個模式匹配中。
1.會做,謝謝你的建議。此錯誤強調了第一行中的函數convert的名稱。 2.當你說匹配f h時,你的意思是用h :: tl替換模式匹配嗎?或者在函數的第二行中與'b列表l匹配?謝謝。 – rubyquartz
1.您還應該看到錯誤消息,如下所示:https://ocaml.org/learn/tutorials/common_error_messages.html。如果您不這樣做,則需要先解決此問題,因爲錯誤消息非常有用。 2.我已經擴展了答案(不完整,因爲如果你想完成它會更好)。 –