微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

OCaml:使用fold_right实现地图

如何解决OCaml:使用fold_right实现地图

我正在尝试使用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) []

此类型检查,但是,当我在示例中运行函数时,它将返回原始列表。我不确定为什么会这样,所以请您澄清一下。

该问题来自SML的Coursera's programming languages course论坛。

解决方法

查看List.fold_right文档。它首先需要折叠列表,然后是初始值。因此,您的代码将折叠到空列表上,并立即返回初始值,这是您真正要折叠的列表。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。