[英]OCaml: How to traverse a list parameter in a record type
如果我有这样的数据结构
type cost = int
type 'a map = {
cities : 'a list
routes : ('a * 'a * cost) list
}
并说我有一个 function 和一个 header 例如
let nearest_cities (m : 'a map) = ...
我想递归遍历路由列表,最好和最干净的方法是什么? 我试图匹配记录,但是我不确定如何递归更新记录的参数
谢谢
你说你想更新记录,但是你定义的记录类型是不可变的。 您无法更改此类记录的字段值。 用函数式语言处理这个问题的通常方法是创建一个包含所需新内容的新记录。
你说你想“遍历”列表,但这还不够具体,无法提供详细的建议。 List
模块中有用于各种遍历的函数: List.iter
、 List.map
、 List.fold_left
等。
例如,这是一个 function,它增加了类型为'a map
的值的所有成本:
let cost_incr map =
{ map with routes =
List.map (fun (a, b, c) -> (a, b, c + 1)) map.routes
}
(另请注意,您需要在记录类型中cities
字段;
定义之后。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.