Я пишу форму формы преобразования в 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. Сделает, спасибо за предложение. Эта ошибка подчеркивает имя функции, преобразование, в первой строке. 2. Когда вы говорите соответствие f h, вы имеете в виду замену соответствия шаблону h :: tl? Или совпадение со списком «b», l, во второй строке функции? Спасибо. – rubyquartz
1. Вы также должны увидеть сообщение об ошибке, как показано ниже: https://ocaml.org/learn/tutorials/common_error_messages.html. Если вы этого не сделаете, это нужно сначала исправить, потому что сообщения об ошибках очень полезны. 2. Я продлил ответ (не полностью, потому что лучше, если вы попытаетесь его закончить). –