Recursion 尾部递归在OCaml中的应用
我用Ocaml编写了这个函数,但我想先应用尾部递归,然后再Recursion 尾部递归在OCaml中的应用,recursion,functional-programming,ocaml,tail-recursion,Recursion,Functional Programming,Ocaml,Tail Recursion,我用Ocaml编写了这个函数,但我想先应用尾部递归,然后再fold\u left编写同样的东西 let rec check fore list = match list with | [] -> [] | h :: t -> if fore h then h :: check fore t else check fore t ;; 这就是我到目前为止所做的。它返回一个大于给定参数的列表(即初始给定列表时)。示
fold\u left
编写同样的东西
let rec check fore list =
match list with
| [] -> [] | h :: t ->
if fore h
then h :: check fore t
else check fore t ;;
这就是我到目前为止所做的。它返回一个大于给定参数的列表(即初始给定列表时)。示例:check(funa->a>=6)[5;4;8;9;3;9;0;2;3;4;5;6;61;2;3;4]
返回-:int-list=[8;9;9;6;61]
如果有任何帮助,我们将不胜感激。为什么不使用
列表。过滤器
List.filter (fun a -> a >= 6) [5;4;8;9;3;9;0;2;3;4;5;6;61;2;3;4]
对于尾部递归,必须向
check
函数添加一个附加参数(累加器)。通常,通过使用累加器的初始值调用的附加内部函数,这是透明的
let rec check acc fore list =
match list with
| [] -> acc
| h :: t ->
if fore h
then check (h::acc) fore t
else check acc fore t
您可能需要在末尾(第三行)执行一个
列表.rev
,但在这种情况下可能不需要执行该操作。事实上,过滤器是尾部递归的。