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拆分为xs和x?还是我误读了?
例如,给定:
concat [[1,2,3],[4],[5]]
Run Code Online (Sandbox Code Playgroud)
是如何[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],和每一次迭代中xs,x成为必然1,2,3,然后4,最后到5。