Haskell - 列表操作:模式分析错误

Haskell - list operation: Parse error in pattern

我正在 Haskell 中编写一个函数,该函数获取两个 Int 类型的列表并将一个列表的值添加到另一个列表中。

例如:addElements [1,2,3] [4,5,6] 将给出输出:[5,7,9]

我目前的功能:

addElements :: [Int] -> [Int] -> [Int]
addElements [] [] = []
addElements x:xs [] = x:xs
addElements [] y:ys = y:ys
addElements x:xs y:ys = [x+y] ++ addElements xs ys

我不断收到错误消息:

Parse error in pattern: addElements Failed, modules loaded: none

我没有得到任何其他信息 - 我做错了什么?

您的模式需要用括号括起来。它本身应该是 (x:xs),而不是 x:xs。这就是导致编译器混淆的原因。

addElements :: [Int] -> [Int] -> [Int]
addElements [] [] = []
addElements (x:xs) [] = x:xs
addElements [] (y:ys) = y:ys
addElements (x:xs) (y:ys) = [x+y] ++ addElements xs ys

不是对 OP 的回答,但我只是想指出模式可以简化为:

addElements :: [Int] -> [Int] -> [Int]
addElements xs [] = xs
addElements [] ys = ys
addElements (x:xs) (y:ys) = (x+y) : addElements xs ys