首页 > 解决方案 > 我正在努力理解如何在 Haskell 中读取 concat

问题描述

连接代码:

concat :: [[a]] -> [a]
concat xss = [x | xs <- xss, x <- xs]

我不明白它是如何被阅读的。如何xss拆分成xsand x?还是我看错了?

例如,给定:

concat [[1,2,3],[4],[5]]

是如何[1,2,3,4,5]实现的?

标签: listhaskellconcatenationlist-comprehension

解决方案


在列表理解中,该位a <- b表示“ for each ainb ”。

所以在你的情况下,xs <- xss应该读作“ for each xsinxss ”,然后x <- xs读作“ for each xinxs ”,这也是有效xs的,因为它本身就是一个列表,因为xss它是一个列表列表。

因此,随着列表推导展开,xs首先绑定到[1,2,3],然后绑定到 ,然后绑定[4][5],并且在 的每次迭代中xsx绑定到1, 2, 3,然后绑定到 ,4最后绑定到5


推荐阅读