簡體   English   中英

尾遞歸在OCaml中的應用

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM