haskell - 如何将具有两个生成器的列表推导重新表达为两个具有一个生成器的列表推导并获得相同的结果?
问题描述
我正在尝试学习 Haskell,并且正在做一些涉及列表的练习。但是我正在努力进行有关列表理解的练习,我真的需要有人来帮助我。练习内容如下:
展示如何[(x,y) | x <- [1,2], y <- [3,4]]
使用具有单个生成器的两个推导式重新表达具有两个生成器的列表推导式。
提示:将一个理解嵌套在另一个理解中并使用库函数concat :: [[a]] -> [a]
。
我感谢所有的答案和解释。谢谢。
解决方案
首先,您可以[1, 2]
使用[x | x <- [1, 2]]
.
现在,对于每个x
,您都希望拥有(x, 3)
and(x, 4)
而不是仅仅x
. 所以让我们用列表推导替换它。然后你会得到[[(x, y) | y <- [3, 4]] | x <- [1, 2]]
.
但这给了您,[[(1,3),(1,4)],[(2,3),(2,4)]]
因为您将每个转换x
为[(x, 3), (x, 4)]
. 正如提示所暗示的,你可以用它concat
来压扁它们。
把它放在一起,你会得到concat [[(x, y) | y <- [3, 4]] | x <- [1, 2]]
.
推荐阅读
- node.js - 如何连接多条mn关系记录
- types - 如何在 C 中使用宏来根据所选类型选择类型和特定功能?
- node.js - 如何在 NodeJS 中处理文件上传到 S3 存储桶的多级路由
- apache-arrow - Apache Arrow 使用 C++ 在镶木地板中编写嵌套类型
- excel - 创建通用命令以清除用户表单中的值
- javascript - 无法在 MongoDB 中更新文档
- android - 如何使存储在 dataStore 中的值影响应用程序的当前语言?
- python - 如何在购物车中正确使用 Django ORM Count
- java - Azure 和 JDBC - 输出特定的数据库条目
- html - 如何在html中访问嵌套的#document?