【发布时间】:2017-02-18 18:01:00
【问题描述】:
我正在用 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
我很确定错误出现在我的第二次模式匹配中。
【问题讨论】:
标签: functional-programming ocaml