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

Jak*_*son 1 haskell list-comprehension list concatenation

concat的代码:

concat :: [[a]] -> [a]
concat xss = [x | xs <- xss, x <- xs]
Run Code Online (Sandbox Code Playgroud)

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

例如,给定:

concat [[1,2,3],[4],[5]]
Run Code Online (Sandbox Code Playgroud)

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

Fyo*_*kin 7

在列表推导式中,位的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