[英]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.