2017-10-31 9 views
0

컨텍스트에 대해 짝수 번호가 지정된 위치의 목록 요소를 출력하는 간단한 함수를 만들려고합니다.싱글 톤리스트, 동등한/잘못된 문장과 일치하는 패턴

>evens [] = [] 
>evens [x] = x 
>evens (x, y, xs) = x : evens xs 

왜 컴파일시 오류가 발생합니까?

나는에 두 번째 줄을 변경 :

>evens [x] = x:[] 

모든 것을는 절대적으로 잘 작동합니다.

learnyouahaskell.com은 패턴 일치에서 (x : [])을 [x]로 다시 쓸 수 있지만 내 함수 정의에서 이것이 실패하는 이유는 무엇입니까?

답변

2

[x] != x. 하나의 요소 목록은 요소 자체와 다릅니다. x:[][x]으로 바꿀 수는 있지만 [x]x으로 바꿀 수는 없습니다. 또한 세 번째 방정식이 잘못되었습니다. 괜찮습니다. 그렇기 때문에 오타가 될 수 있습니다. 그러나 evens의 전체 정의는 다음과 같습니다.