Functional programming OCaml理解函数和部分应用
我正在用OCaml编写一种转换形式,它接受一个函数并接受一个要转换的列表。我知道我的模式匹配在类型检查方面有问题,因为它不会编译并声称类型不匹配,但我不确定我的案例到底出了什么问题。 当我尝试编译时,我收到一个实际的声明错误,它在函数名下面加了下划线Functional programming OCaml理解函数和部分应用,functional-programming,ocaml,Functional Programming,Ocaml,我正在用OCaml编写一种转换形式,它接受一个函数并接受一个要转换的列表。我知道我的模式匹配在类型检查方面有问题,因为它不会编译并声称类型不匹配,但我不确定我的案例到底出了什么问题。 当我尝试编译时,我收到一个实际的声明错误,它在函数名下面加了下划线 let rec convert (fun: 'b -> 'c option) (l: 'b list) : 'c list = begin match l with | [] -> [] | h::tl -> if f h =
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
我很有信心这个错误在我的第二个模式比赛中
h::convert f tl
中,convert f tl
是'c list
,但h
是'b
,因此不能这样组合它们。fh=Some h
也没有意义:fh
是'c选项
,一些h
是'b选项
。您可能希望匹配f h
:
| h::tl -> match f h with
| Some h1 -> ...
| None -> ...
h::convert f tl
中,convert f tl
是'c list
,但h
是'b
,因此不能这样组合它们。fh=Some h
也没有意义:fh
是'c选项
,一些h
是'b选项
。您可能希望匹配f h
:
| h::tl -> match f h with
| Some h1 -> ...
| None -> ...
1.好的,谢谢你的建议。此错误在第一行中突出显示函数convert的名称。2.当你说match f h时,你的意思是用h::tl替换模式匹配吗?或者与函数第二行中的'b列表l'匹配?谢谢。您还应该看到错误消息,如下所示:。如果没有,则需要首先修复此问题,因为错误消息非常有用。2.我已经扩展了答案(不完全,因为如果你试着完成它会更好)。好的,谢谢你的建议。此错误在第一行中突出显示函数convert的名称。2.当你说match f h时,你的意思是用h::tl替换模式匹配吗?或者与函数第二行中的'b列表l'匹配?谢谢。您还应该看到错误消息,如下所示:。如果没有,则需要首先修复此问题,因为错误消息非常有用。2.我已经扩展了答案(不完全,因为如果你尝试完成它会更好)。