haskell - 遍历 Haskell 中的 3 元组列表
问题描述
plusOne :: [[(Int, Int, Int)]] -> [[(Int, Int, Int)]]
给定一个三元组列表。如果我想遍历列表并对 Int 值 +1,我应该如何处理?我不确定这是否是应该使用地图的场景。
有人可以指出我正确的方向吗?
解决方案
拆分功能。清单很简单;每人一个map
。但是元组不会像在 Python 中那样遍历,所以它们需要解包才能访问元素。这可以通过泛型编程实现,但通过模式匹配更容易。元组可以包含不同类型的字段,因此map
无法访问所有字段。我们可以专门为三元组制作自己的地图模拟:
map3t :: (x -> y) -> (x, x, x) -> (y, y, y)
map3t f (a, b, c) = (f a, f b, f c)
现在我们可以检查我们类型的每个级别并分别处理它:
op :: Int -> Int
op = (+1)
t3 :: (Int, Int, Int) -> (Int, Int, Int)
t3 = map3t op
lt3 :: [(Int, Int, Int)] -> [(Int, Int, Int)]
lt3 = map t3
llt3 :: [[(Int, Int, Int)]] -> [[(Int, Int, Int)]]
llt3 = map lt3
这不是递归,尽管map
可以使用递归 ( Data.List.map
is) 来实现。每个函数为内部级别调用不同的函数。
推荐阅读
- r - 使用 ggplot 绘制分组数据
- laravel - 使用 Maatwebsite\Excel 3.1 的 Laravel 7 带有 excel 文件的邮件附件
- dart - 在扩展类中找不到扩展方法
- javascript - 单击数据表导航后获取 JQuery 数据 ID 值的问题
- amibroker - 简单的 ORB 15 分钟模板 - 绘制错误信号
- forms - 如何将 URL 参数传递到第 3 方嵌入式表单
- ruby-on-rails - 在入口后面的 url 段下提供的 Rails 应用程序
- c++ - 将这个指针按值赋值给getter的返回值是什么意思?
- python - 如何使用 SQLAlchemy (1.3.18) 和 Python (3.8.3) 连接我的 Sybase 数据库?
- python - 当用户在python中更改个人资料图像时,如何从文件夹中删除以前上传的图像?