0

我刚刚在 learnyouahaskell.com 上遇到了这个例子。但是,我完全不明白。

ghci> let xxs = [[1,3,5,2,3,1,2,4,5],[1,2,3,4,5,6,7,8,9],[1,2,4,2,1,6,3,1,3,2,3,6]]  
ghci> [ [ x | x <- xs, even x ] | xs <- xxs]  
[[2,2,4],[2,4,6,8],[2,4,2,6,2,6]] -- This is the output

我的问题是,虽然我确实理解列表推导的概念,但我不明白它的xxs含义。如果它只是列表列表的名称,我们如何拆分名称并执行类似xs <- xxs. 对我来说这根本没有意义。

有人可以帮忙吗?

4

1 回答 1

3

xxs是绑定在 let 表达式中的列表的列表。我认为您对xxsand的相似性感到困惑xs,它们只是两个没有关系的独立名称。您可以替换xssublist或任何其他有效名称。

ghci> let xxs = [[1,3,5,2,3,1,2,4,5],[1,2,3,4,5,6,7,8,9],[1,2,4,2,1,6,3,1,3,2,3,6]]  
ghci> [ [ x | x <- sublist, even x ] | sublist <- xxs]

因此,我们没有拆分名称,我们只是使用<-列表推导运算符来迭代 a 的元素,[[a]]然后对迭代每个子列表的元素有另一个[a]推导。

于 2013-11-05T20:29:20.907 回答