Jason Hickey による Introduction to Objective Camlから、末尾再帰マップ関数があります。
let rec rev_accum result = function
h::tl -> rev_accum (h :: result) tl
| [] -> result
let rec rec_map f result = function
h :: tl -> rec_map f (f h :: result) tl
| [] -> result
let map1 f l = rev_accum [] ( rec_map f [] l )
リストを 2 回トラバースします。この代替案を検討してください。
let rec rec_map2 f result = function
h :: tl -> rec_map2 f ( result @[f h]) tl
| [] -> result
let map2 f l = rec_map2 f [] l ;
2 番目のものは最初のものよりも速くなりますか?