[英]Application of Tail-Recursion in OCaml
我在Ocaml中编写了这个函数,但我想先编写同样的东西,首先应用tail-recursion然后再使用fold_left
。
let rec check fore list =
match list with
| [] -> [] | h :: t ->
if fore h
then h :: check fore t
else check fore t ;;
这就是我到目前为止所做的。 它返回一个大于给定参数的列表(最初给定列表时)。 示例: check (fun a -> 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]
# - : int list = [8; 9; 9; 6; 61]
任何帮助,将不胜感激。
你为什么不使用List.filter
?
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
您可能需要在结尾处执行List.rev
(第三行),但在这种情况下可能没有必要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.