如何在Haskell中读取名称?

时间:2013-11-05 20:25:12

标签: list haskell list-comprehension

我刚刚在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之类的操作。对我来说根本没有意义。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

xxs是let表达式中绑定的列表列表。我认为你对xxsxs的相似性感到困惑,它们只是两个没有关系的独立名称。您可以将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]子列表。