小编The*_*God的帖子

尾递归文件夹

我想在f#中编写一个尾递归文件夹,以利用尾递归优化并了解有关函数式编程的更多信息。

我写了一个尾递归折叠,和一个不是尾递归的文件夹。我以为可以通过反转馈给该函数的列表来获取尾递归文件夹,然后对其调用我的尾递归文件夹,但是由于该功能应采用的顺序不同,因此无法正常工作。

let rec tail_recurse_foldl(list: List<'a>, func:('b -> 'a -> 'b), acc: 'b) =
    match list with 
    | [] -> acc
    | [x] -> func acc x
    | x :: xs -> tail_recurse_foldl(xs, func, func acc x)
Run Code Online (Sandbox Code Playgroud)

和非尾递归文件夹

let rec foldr(list: List<'a>, func:('a -> 'b -> 'b), acc: 'b) =
    match list with
    | [] -> acc
    | [x] -> func x acc
    | x::xs -> func x (foldr(xs, func, acc))
Run Code Online (Sandbox Code Playgroud)

f# functional-programming

0
推荐指数
1
解决办法
78
查看次数

标签 统计

f# ×1

functional-programming ×1