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

Haskell实现多项式相加报Couldn't match expected type错误求解决

错误根因

你自定义的多项式类型Poly a是对列表的包装类型,polyadd函数的返回值为Poly a类型,而列表拼接运算符(:)要求第二个操作数必须是[a]列表类型,你直接将polyadd的返回值作为(:)的第二个参数,类型不匹配因此触发报错,报错信息中的类型不匹配提示正是对应这个问题。

修复方法

你只需要先取出递归调用返回的Poly a内部包装的列表,完成拼接后再重新包装为Poly a类型即可,修正后的代码如下:

data Poly a = P [a] deriving (Show, Eq)

polyadd :: (Num a) => Poly a -> Poly a -> Poly a
polyadd (P []) (P ys) = P ys
polyadd (P xs) (P []) = P xs
polyadd (P (x:xs)) (P (y:ys)) = 
  let P rest = polyadd (P xs) (P ys)
  in P ((x + y) : rest)

说明:原代码中的Eq类型约束属于多余约束,加法逻辑不需要判断值相等,因此可以移除,如果你后续需要补充去除前导零的逻辑,可以再加回Eq约束。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:39:01