List n个偶数/奇数的Haskell init列表

List n个偶数/奇数的Haskell init列表,list,haskell,List,Haskell,如何初始化n奇数或偶数元素的列表,可以这样做吗 even_list :: Int -> [Int] even_list n = [x | x <- [1..], even x, length n] 偶数列表::Int->[Int] 即使是n=[x | x现在已经找到了解决方案,但我想这是肮脏和低速的 even_list n = takeWhile (< n * 2) [x | x <- [1..], even x] odd_list n = takeWhile (<

如何初始化
n
奇数
偶数
元素的列表,可以这样做吗

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

即使是n=[x | x现在已经找到了解决方案,但我想这是肮脏和低速的

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

对于现在找到的解决方案,偶数列表n=takeWhile(
even_list n = takeWhile (< n * 2) [x | x <- [1..], even x]
odd_list n = takeWhile (<= n * 2) [x | x <- [1..], odd x]

偶数列表n=takeWhile([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
,您可以
翻转
取下
,这样就不用先取长度,而是最后取长度:

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]

您可以使用带有步长指示器的列表理解来生成具有特定步长的无限列表,例如
[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
,您可以
翻转
取下
,这样就不用先取长度,而是最后取长度:

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]

你试过了吗?成功了吗?如果没有,什么地方出了问题?是的,不成功,因为我不能只是“长度n”,正如我所理解的-cond expected你能给出一个期望输出的例子吗?你说的init是什么意思?Haskell有一个
init
函数。你试过了吗?成功了吗?如果没有,出了什么问题?是的,不成功,因为我不能只是“le”正如我所理解的-cond expected你能给出一个期望输出的例子吗?你所说的init是什么意思?Haskell有一个
init
函数。