You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haskell编程求助:实现列表偶数索引元素提取及odds函数

解决Haskell中evens和odds函数的实现问题

你的代码里xs !! 2n是语法错误,而且列表推导式没法直接这么获取索引。要定位元素的索引,得把元素和它的索引配对,用zip [0..]就能给列表里每个元素绑定从0开始的索引值。

修正后的evens函数

要返回偶数索引(0、2、4...)的元素,我们可以用列表推导式结合zip来筛选:

evens :: [a] -> [a]
evens xs = [x | (x, idx) <- zip xs [0..], even idx]

这里zip xs [0..]把每个元素和它的索引打包成元组,然后我们只保留索引为偶数的元素。

实现odds函数

odds函数要返回剩余的奇数索引(1、3、5...)元素,有两种实现方式:

方式一:独立实现列表推导式

和evens逻辑类似,只是筛选索引为奇数的元素:

odds :: [a] -> [a]
odds xs = [x | (x, idx) <- zip xs [0..], odd idx]

方式二:基于已实现的evens函数

原列表的奇数索引元素,去掉第一个元素后,它们的索引就变成了新列表的偶数索引。所以可以直接复用evens函数:

odds :: [a] -> [a]
odds xs = evens (tail xs)

测试示例

-- 测试evens
evens [1,2,3,4,5]  -- 结果:[1,3,5]
evens ["apple", "banana", "cherry"] -- 结果:["apple", "cherry"]

-- 测试odds
odds [1,2,3,4,5]  -- 结果:[2,4]
odds ["apple", "banana", "cherry"] -- 结果:["banana"]

内容的提问来源于stack exchange,提问作者user123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 02:15:34