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

Haskell自定义List类型实现每第二个元素加倍的函数求助

你写的模式匹配存在基础错误:自定义的Cons构造子仅接收2个参数(当前存储的整数、后续的List结构),你写的Cons x y z尝试匹配3个参数,会直接编译报错。

实现思路非常直接,按每两个元素为一组递归处理列表即可:

  • 遇到空列表直接返回
  • 遇到只有单个元素的列表直接返回(不存在第二个元素需要处理)
  • 遇到至少两个元素的列表时,保留第一个元素,将第二个元素加倍,再对剩下的列表递归调用当前函数

完整实现代码如下:

data List = Empty | Cons Integer List deriving Show
list = Cons 1 (Cons 7 (Cons 9 (Cons 3 Empty)))

double2nd :: List -> List
double2nd Empty = Empty -- 空列表直接返回
double2nd (Cons x Empty) = Cons x Empty -- 仅剩余一个元素时无需处理直接返回
double2nd (Cons x (Cons y rest)) = Cons x (Cons (2 * y) (double2nd rest)) -- 两个元素为一组处理,第二个元素加倍后递归处理剩余部分

testDouble = putStrLn ("expected: Cons 1 (Cons 14 (Cons 9 (Cons 6 Empty)))\ncomputed: " ++ show (double2nd list))

运行testDouble即可看到输出结果和预期完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:57:01