2017-02-27 5 views
0

Ich schreibe in Haskell eine Funktion, die zwei Listen des Typs Int erhält und die Werte einer Liste zu der anderen hinzufügt.Haskell - Listenoperation: Parse-Fehler im Muster

zum Beispiel: addElements [1,2,3] [4,5,6] den Ausgang geben: [5,7,9]

meine Funktion bisher:

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 

Ich erhalte die Fehlermeldung:

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

Ich bekomme keine zusätzliche Informationen - was habe ich falsch gemacht?

+3

Ich glaube, Sie müssen Klammern um das 'x: xs' und' y : ys Muster stimmt überein. – ryachza

+0

Mögliches Duplikat von [Haskell: Parse-Fehler im Muster] (https://stackoverflow.com/questions/8561762/haskell-parse-error-in-pattern) –

Antwort

7

Sie benötigen Klammern um Ihre Muster. Es sollte (x:xs), nicht x:xs allein sein. Das verursacht die Verwirrung des Compilers.

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

keine Antwort auf die OP, aber ich wollte nur darauf hinweisen, dass die Muster vereinfacht werden kann:

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