我刚刚在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
之类的操作。对我来说根本没有意义。
有人可以帮忙吗?
答案 0 :(得分:3)
xxs
是let表达式中绑定的列表列表。我认为你对xxs
和xs
的相似性感到困惑,它们只是两个没有关系的独立名称。您可以将xs
替换为sublist
或任何其他有效名称。
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]
子列表。