如何删除 Haskell 中的偶数索引?
How to remove even indexes in Haskell?
函数式程序的新手,我需要从列表中删除索引元素,到目前为止我只能创建一个列表,从 1 到 n。
列表:[1,2,3,4,5,6...100]
目标:[1,3,5,7,9...99]
main = do
input <- readLn :: IO Int
let a = input
let list=[1..a]
putStrLn $ show list
您可以生成一个仅包含奇数元素的列表,方法是使用以 1
开头然后 3
和限制 a
:
的范围
main = do
input <- readLn :: IO Int
print <strong>[1, 3..a]</strong>
这将调用 enumFromThenTo :: Enum a => a -> a -> a -> [a]
,从而生成一个包含两个步骤的列表。
你也可以做两个相互递归的函数:
evens :: [a] -> [a]
evens [] = []
evens (_:xs) = odds xs
odds :: [a] -> [a]
odds [] = []
odds (x:xs) = x : evens xs
然后在列表 [1 .. 100]
上调用 odds
会产生:
Prelude> odds [1 .. 100]
[1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51,53,55,57,59,61,63,65,67,69,71,73,75,77,79,81,83,85,87,89,91,93,95,97,99]
和evens
可用于获取偶数索引上的元素。
用一个简单的示例列表稍微详细说明这种相互递归的样子:
odds [1, 4, 2, 7, 9, 6]
1 : evens [4, 2, 7, 9, 6]
1 : odds [4, 7, 9, 6]
1 : 2 : evens [7, 9, 6]
1 : 2 : odds [9, 6]
1 : 2 : 9 : evens [6]
1 : 2 : 9 : odds []
1 : 2 : 9 : []
[1, 2, 9]
或者如果你想删除偶数项(不是偶数索引),你可以使用:
Prelude> filter odd [1, 4 .. 100]
[1,7,13,19,25,31,37,43,49,55,61,67,73,79,85,91,97]
函数式程序的新手,我需要从列表中删除索引元素,到目前为止我只能创建一个列表,从 1 到 n。 列表:[1,2,3,4,5,6...100] 目标:[1,3,5,7,9...99]
main = do
input <- readLn :: IO Int
let a = input
let list=[1..a]
putStrLn $ show list
您可以生成一个仅包含奇数元素的列表,方法是使用以 1
开头然后 3
和限制 a
:
main = do
input <- readLn :: IO Int
print <strong>[1, 3..a]</strong>
这将调用 enumFromThenTo :: Enum a => a -> a -> a -> [a]
,从而生成一个包含两个步骤的列表。
你也可以做两个相互递归的函数:
evens :: [a] -> [a]
evens [] = []
evens (_:xs) = odds xs
odds :: [a] -> [a]
odds [] = []
odds (x:xs) = x : evens xs
然后在列表 [1 .. 100]
上调用 odds
会产生:
Prelude> odds [1 .. 100]
[1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51,53,55,57,59,61,63,65,67,69,71,73,75,77,79,81,83,85,87,89,91,93,95,97,99]
和evens
可用于获取偶数索引上的元素。
用一个简单的示例列表稍微详细说明这种相互递归的样子:
odds [1, 4, 2, 7, 9, 6]
1 : evens [4, 2, 7, 9, 6]
1 : odds [4, 7, 9, 6]
1 : 2 : evens [7, 9, 6]
1 : 2 : odds [9, 6]
1 : 2 : 9 : evens [6]
1 : 2 : 9 : odds []
1 : 2 : 9 : []
[1, 2, 9]
或者如果你想删除偶数项(不是偶数索引),你可以使用:
Prelude> filter odd [1, 4 .. 100]
[1,7,13,19,25,31,37,43,49,55,61,67,73,79,85,91,97]