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
相关产品推荐
相关产品推荐

