list - 为什么以下两个表达式有不同的结果
问题描述
fibs = 1:1:[x+y|x <- fibs, y <- tail fibs]
返回
[1,1,2,3,4,5,6,7,8,9]
fibs = 1:1:[x+y|(x, y) <- zip fibs (tail fibs)]
返回
[1,1,2,3,5,8,13,21,34,55...]
解决方案
第一个是评估 和 的笛卡尔积(即每个组合)fibs
,tail fibs
而第二个是评估成对配对。
Prelude> [(x,y) | x <- [1,2,3], y <- [4,5,6]]
[(1,4),(1,5),(1,6),(2,4),(2,5),(2,6),(3,4),(3,5),(3,6)]
Prelude> [(x,y) | (x,y) <- [1,2,3] `zip` [4,5,6]]
[(1,4),(2,5),(3,6)]
推荐阅读
- azure-devops - 自动向 Azure DevOps 中的所有拉取请求添加注释
- c++ - 逆时针方向旋转矩阵90度,我哪里错了
- reactjs - React Redux 获取连接组件中的当前路径
- python - 如何将 shap.DeepExplainer (SwigPyObject) 保存到文件中?
- c++ - 如何指示名称空间仅供库使用?
- php - MySQLi *IS* 存在且功能正常 - 但在 Eclipse 中不可用
- python-3.x - Python3 Pandas.DataFrame.info() 错误键:30
- xml - XML:如何使用 XPath 获取 2 个处理指令之间的所有文本节点和节点
- java - 如何更改文本在 TextField 中的呈现方式?
- python - 为什么我只能在使用 `pipenv run papermill` 时在我的 jupyter 笔记本中导入包?