list - 我正在努力理解如何在 Haskell 中读取 concat
问题描述
连接代码:
concat :: [[a]] -> [a]
concat xss = [x | xs <- xss, x <- xs]
我不明白它是如何被阅读的。如何xss
拆分成xs
and x
?还是我看错了?
例如,给定:
concat [[1,2,3],[4],[5]]
是如何[1,2,3,4,5]
实现的?
解决方案
在列表理解中,该位a <- b
表示“ for each a
inb
”。
所以在你的情况下,xs <- xss
应该读作“ for each xs
inxss
”,然后x <- xs
读作“ for each x
inxs
”,这也是有效xs
的,因为它本身就是一个列表,因为xss
它是一个列表列表。
因此,随着列表推导展开,xs
首先绑定到[1,2,3]
,然后绑定到 ,然后绑定[4]
到[5]
,并且在 的每次迭代中xs
,x
绑定到1
, 2
, 3
,然后绑定到 ,4
最后绑定到5
。
推荐阅读
- ada - Ada - 你如何从单行输入中读取数组?
- arrays - 数组的冒泡排序交换次数与插入排序的单个移位次数相同
- node.js - 无法摆脱纱线不正确的对等依赖警告
- c# - 如何使标准 WPF 拼写检查器识别缩写,例如,即
- c# - 我的 Xamarin.forms 图像未加载,您能帮帮我吗?
- java - Java中的BitSet是否存储位或整数?
- python - 如何验证计算器程序的整数运算符?
- html - 如何在 Ionic 4 中更改离子按钮的大小?
- javascript - 模拟 api 调用和检查错误的笑话问题
- android - 无法通过 settext 更新 textview 的值