我在Ocaml中编写了这个函数,但是我想先编写同样的东西,先应用尾递归然后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]
任何帮助都将不胜感激。
答案 0 :(得分:4)
为什么不使用List.filter
?
List.filter (fun a -> a >= 6) [5;4;8;9;3;9;0;2;3;4;5;6;61;2;3;4]
答案 1 :(得分: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
(第3行),但在这种情况下可能没有必要。