2017-02-27 5 views
0

형식으로 두 개의 목록을 얻고 하나의 목록의 값을 다른 하나의 목록에 추가하는 함수를 작성했습니다. 예를 들어하스켈 -리스트 연산 : 패턴의 구문 분석 오류

: 지금까지 [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 

I 오류가 계속 : addElements [1,2,3] [4,5,6] 출력 줄 것이다

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

을 나는 추가 정보를 얻을하지 않습니다 - 내가 뭘 잘못 했니?

+3

: 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에 대한 답변,하지만 난 단지에 패턴이 단순화 될 수 있음을 지적하고 싶었 : xs`와`Y : 난 당신이 'X 주위에 괄호가 필요하다고 생각

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