我遇到了这段代码的问题:
listAdd :: Int -> [Int] -> [Int]
ListAdd x (y:ys) = (x+y):(foldl listAdd y ys)
它应该将列表的左侧元素添加到右侧,从x +开始,第一个元素,第一个元素,第二个元素等。
编译器说:
Couldnt match expected type [Int] with actual type Int.
我不知道问题是什么。如果有人能告诉我的话会很棒。
答案 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
类型的构造函数,否则函数名也不应该以大写字母开头。