我看不出代码中的“偶数”有什么作用?

Fen*_* Hu 0 haskell

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)

这段代码与列表理解有关。但是我看不到程序如何与“偶数”一起使用

Wil*_*sem 8

Haskell列表推导表达式在列表推导的右侧具有三种类型的元素:

  1. 形式的发电机var <- list-expr ;
  2. 形式的过滤器bool-expr ; 和
  3. 表格的本地定义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偶数元素的列表。