【发布时间】:2013-02-28 08:37:17
【问题描述】:
List.fold_right 不是tail-recursive 此处指出的http://caml.inria.fr/pub/docs/manual-ocaml/libref/List.html
我的问题是为什么 List.fold_right 没有实现为 tail-recursive?
我认为这样做并不难
let rev l =
let rec revr acc = function
| [] -> acc
| hd::tl -> revr (hd::acc) tl
in
revr [] l;;
let fold_right f l b =
let rev_l = rev l
in
let rec folder_rr acc = function
| [] -> acc
| hd::tl -> folder_rr (f hd acc) tl
in
folder_rr b rev_l;;
我还在库中发现,很多函数不是tail-recursive,而可以实现为tail-recursive。 制作者是如何做出这样的决定的?
【问题讨论】:
标签: functional-programming ocaml