Recursion 尾部递归在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 ;; 这就是我到目前为止所做的。它返回一个大于给定参数的列表(即初始给定列表时)。示

我用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 ;;
这就是我到目前为止所做的。它返回一个大于给定参数的列表(即初始给定列表时)。示例:
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
,但在这种情况下可能不需要执行该操作。

事实上,
过滤器是尾部递归的。