如何初始化n
odd
或even
元素列表,我可以这样做吗?
even_list :: Int -> [Int]
even_list n = [x | x <- [1..], even x, length n]
答案 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]
哪里更容易?