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 初始值,这是您真正想要折叠的列表。
我正在尝试在 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 初始值,这是您真正想要折叠的列表。