2017-02-27 52 views
0

我在Haskell中寫入了一個函數,該函數獲取兩個類型爲Int的列表並將一個列表的值添加到另一個列表中。Haskell - 列表操作:模式中的分析錯誤

例如: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

我沒有得到任何額外的信息 - 我做錯了什麼?

+3

我認爲你需要周圍的'X括號:xs'和回答'y :ys'模式匹配。 – ryachza

+0

[Haskell:模式中的分析錯誤]的可能重複(https://stackoverflow.com/questions/8561762/haskell-parse-error-in-pattern) –

回答

7

你需要圍繞你的模式使用圓括號。它應該是(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 
1

不是一個答案,OP,但我只是想指出的是,模式可以被簡化爲:

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