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