首页 > 解决方案 > 如何在 Haskell 中列表的列表理解中仅获得偶数

问题描述

我正在尝试获取起始和长度并返回一个列表列表,该列表逐渐将偶数起始整数增加 2

例如:

evenIncrease 6 3

应该返回: [[6],[6,8],[6,8,10]]

我是 Haskell 的新手,到目前为止,我的尝试如下所示:

evenIncrease n l = [[n..i] | i <- [n..n+(l*2)-2], even i]

但是当我尝试我的例子时evenIncrease 6 3,我得到:

[[6],[6,7,8],[6,7,8,9,10]]

这几乎是我正在寻找的,但我不明白为什么当我使用警卫“偶数 i”时内部列表中仍然有奇数

有任何想法吗?

标签: haskell

解决方案


您正确地只生成了 even endpoints,但[n..i]仍以 1 递增,因此即使两个端点都是偶数,您仍然会得到 eg [6..8] = [6,7,8]。试试[n,n+2..i]


推荐阅读