无法匹配预期的类型

时间:2014-01-24 21:57:32

标签: haskell

我遇到了这段代码的问题:

listAdd :: Int -> [Int] -> [Int]

ListAdd x (y:ys) = (x+y):(foldl listAdd y ys)

它应该将列表的左侧元素添加到右侧,从x +开始,第一个元素,第一个元素,第二个元素等。

编译器说: Couldnt match expected type [Int] with actual type Int.

我不知道问题是什么。如果有人能告诉我的话会很棒。

2 个答案:

答案 0 :(得分:2)

您只需将其更改为

即可
listAdd _ [] = []
listAdd x (y:ys) = (x + y) : listAdd y ys

你根本不需要折叠!只需简单的递归即可。

但是,我会使用zipWith (+)

来使用一个小技巧
listAdd x xs = zipWith (+) xs (x : xs)

您不必使用任何显式递归,并且它适用于任何长度列表(不需要[]的特殊情况)

答案 1 :(得分:0)

请查看foldl您传递的函数类型为Int -> [Int] -> [Int]并且与a -> b -> a不匹配,因为Int[Int]的类型不同{1}}。

您可能希望在此实例中使用的是map

listAdd x ys = map (\y-> x + y) ys

编辑:除非你的函数实际上是某种data类型的构造函数,否则函数名也不应该以大写字母开头。