如何解决OCaml:如何遍历记录类型中的列表参数
如果我有一个数据结构,例如
type cost = int
type 'a map = {
cities : 'a list
routes : ('a * 'a * cost) list
}
说我有一个带有标题的函数,例如
let nearest_cities (m : 'a map) = ...
我想递归地遍历路线列表,什么是最好,最干净的方法?我试图匹配记录,但是我不确定如何递归更新记录的参数
谢谢
解决方法
您说要更新记录,但是您定义的记录类型是不可变的。您不能更改此类记录的字段的值。用功能语言处理此问题的常用方法是创建具有所需新内容的新记录。
您说您想“遍历”列表,但这还不够具体,无法提供详细的建议。 List
模块中具有用于各种遍历的功能:List.iter
,List.map
,List.fold_left
等。
作为示例,下面是一个函数,该函数增加类型'a map
的值的所有开销:
let cost_incr map =
{ map with routes =
List.map (fun (a,b,c) -> (a,c + 1)) map.routes
}
(还请注意,在记录类型的;
字段定义之后,您需要cities
。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。