| [] -> f a
| hd :: tl -> list_fold_right (map f hd) map tl a
+let rec list_fold_right2 f map l1 l2 a = match l1, l2 with
+ | [], [] -> f a
+ | hd1 :: tl1, hd2 :: tl2 -> list_fold_right2 (map f hd1 hd2) map tl1 tl2 a
+ | _ -> failwith "Cps.list_fold_right2"
+
let list_map f map l =
let map f hd a =
let f hd = f (hd :: a) in map f hd