15

누가이 코드에 어떤 문제가 있는지 (구문 적으로) 말하고 싶습니까?Haskell : 패턴의 구문 분석 오류

-- merge two sorted lists 
mergeX [] b res = b ++ res 
mergeX a [] res = a ++ res 
mergeX a:as b:bs res 
    | a > b  = mergeX as b:bs a:res 
    | otherwise = mergeX a:as bs b:res 

는 통역 : 패턴

구문 분석 오류 : mergeX

답변

30

당신은 어떤 괄호가 필요합니다 : 기능보다 낮은 우선 순위를 가지고 있기 때문에

mergeX [] b res = b ++ res 
mergeX a [] res = a ++ res 
mergeX (a:as) (b:bs) res 
    | a > b  = mergeX as (b:bs) (a:res) 
    | otherwise = mergeX (a:as) bs (b:res) 

이유는 응용 프로그램이므로 mergeX a:as b:bs res이됩니다. 로 구문 분석 :

(mergeX a):(as b):(bs res) 

이것은 오류입니다.

+0

감사합니다. 나는 sth을 가졌음을 기억합니다. 전에 그런;). 일반적으로 실수를 방지하기 위해 x : xs 대신 항상 (x : xs)를 사용합니까? – user905686

+1

@ user905686 : 패턴 있음, 예. – kennytm

1

생성자 패턴을 괄호 안에 넣어야합니다.

mergeX (a:as) (b:bs) res