OCaml:使用 fold_right 实现地图

OCaml: Using fold_right to implement map

我正在尝试在 OCaml 中使用 List.fold_right 实现映射,其中我的函数具有与 List.map 相同的签名和行为。我不允许使用模式匹配或任何其他列表函数。

示例:

SIGNATURE: fold_map: ('a -> 'b) -> 'b list -> 'b list = <fun>


EXAMPLE: fold_map (fun x -> x + 1) [1; 2; 3; 4; 5] = [2; 3; 4; 5; 6]

我的尝试:

let fold_map f =
  List.fold_right(fun x acc -> (f x) :: acc) []

这种类型检查,但是,当我 运行 我的函数在示例中时,它 returns 原始列表。我不确定为什么会这样,所以任何澄清将不胜感激。

问题取自Coursera's programming languages course的论坛,是SML。

查看 List.fold_right 文档。它首先获取要折叠的列表,然后获取初始值。因此,您的代码折叠空列表并立即 returns 初始值,这是您真正想要折叠的列表。