我正在努力理解如何在Haskell中读取concat

concat的代码:

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

我不明白它是如何被阅读的。如何xss拆分为xsx?还是我误读了?

例如,给定:

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

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

回答

在列表推导式中,位的a <- b意思是“ for each ainb ”。

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

因此,作为列表理解展现出来的,xs成为第一个必然[1,2,3],然后[4],然后[5],和每一次迭代中xsx成为必然123,然后4,最后到5


以上是我正在努力理解如何在Haskell中读取concat的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>