Haskell初始列表n偶数/奇数

时间:2018-02-21 06:45:36

标签: list haskell

如何初始化n oddeven元素列表,我可以这样做吗?

even_list :: Int -> [Int]
even_list n = [x | x <- [1..], even x, length n]

2 个答案:

答案 0 :(得分:2)

您可以将列表推导与步骤指示符一起使用,以生成具有特定步长的无限列表,例如[2,4..][1,3..]

当你想要一个有限列表而不是一个无限列表时,你可以使用take,所以第一次尝试可能是这样的:

Prelude> even_list n = take n [2,4..]
Prelude> even_list 15
[2,4,6,8,10,12,14,16,18,20,22,24,26,28,30]

如果您想要免费删除并消除n,您可以flip take这样,不要先取长度,而是花费最后一次:

Prelude> :t flip take
flip take :: [a] -> Int -> [a]

您可以将此部分应用于例如奇数,得到这个:

Prelude> odd_list = flip take [1,3..]
Prelude> odd_list 12
[1,3,5,7,9,11,13,15,17,19,21,23]

答案 1 :(得分:1)

现在已找到解决方案,但我猜它的污垢和低速

even_list n = takeWhile (< n * 2) [x | x <- [1..], even x]
odd_list n = takeWhile (<= n * 2) [x | x <- [1..], odd x]

哪里更容易?