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
。メーカーはどのようにしてそのような決定を下しましたか?