问题描述
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
。)