pattern-matching - 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
, 等等。
例如,这是一个增加 type 值的所有成本的函数'a map
:
let cost_incr map =
{ map with routes =
List.map (fun (a, b, c) -> (a, b, c + 1)) map.routes
}
(还要注意你需要;
在记录类型中定义cities
字段之后。)
推荐阅读
- android - 如何在 Android Kotlin 中使用 onclicklistner 获取按钮文本?
- ansible - 用字典迭代字典列表
- flutter - 如何在windows中像DLL一样在flutter中创建动态链接库
- sql - SQL 查询中的 HTML
- c++ - C++ 数值导数
- flutter - 网络爬虫包是否有限制或其他?
- firebase - Firebase - Web - 测试安全规则 - 无法访问 Cloud Firestore 后端
- flutter - 颤振插件很慢
- algorithm - 动态规划/子问题+过渡
- bash - 为什么 BASHPID 在此处的字符串中发生变化