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]]
Run Code Online (Sandbox Code Playgroud)
这段代码与列表理解有关。但是我看不到程序如何与“偶数”一起使用
Haskell列表推导表达式在列表推导的右侧具有三种类型的元素:
var <- list-expr ;bool-expr ; 和let var = expr。even x因此,该零件是过滤器。这意味着仅当满足过滤条件时,even x结果True,该元素才是列表理解的其余部分的候选项,因此最终导致将元素分支添加到列表中。
因此,这里的表达式包含两个部分:
[x | x <- xs, even x ]
-- \__ __/ \__ _/
-- v v
-- generator filter
Run Code Online (Sandbox Code Playgroud)
因此,我们迭代其中的元素xs,然后针对每个元素检查该元素是否为even,如果是,则将其添加x到结果中。
但是,以上内容可以写为:
filter even xs
Run Code Online (Sandbox Code Playgroud)
基本上描述了我们在这里所做的事情:我们过滤列表xs,以便结果是仅包含xs偶数元素的列表。