2012-09-19 2 views
1

나는 this tutorial에 주어진 다음 예제를 시도했다.이 코드는 왜 "포괄적 인 패턴이없는 경우"오류가 발생합니까?

내가 이해할 수없는 것은 케이스 'c'_에 대한 케이스 경비가 on을 전혀 사용하지 않는다는 것입니다.

나는 주어진 here로 코드를 수정,하지만 난 그것을 실행할 때 나는 오류 "경우에 비 철저한 패턴"가지고 : 왜 그렇게이다

*StateGame> main "accaaaa" 
*** Exception: state1.hs:(27,5)-(31,36): Non-exhaustive patterns in case 

를?

+3

첫 번째 두 가지 경우에'on '이라고 생각하는 것을 설명 할 수 있습니까? 그리고 모든 경우에 그것을 추가하는 것이 합리적이라고 생각하는 이유는 무엇입니까? – sepp2k

+0

StackOverflow에서 hpaste에 대한 링크를 제공하는 것보다 코드를 직접 포함 (코드로 표시하려면 네 칸 씩 들여 쓰기)하는 것이 좋습니다. – AndrewC

답변

6

케이스 가드는 해당 패턴과 성공적으로 일치 한 후 검사되는 부울 표현식입니다. True으로 평가되면 해당 분기가 선택됩니다. 그렇지 않으면 Haskell은 각 사례를 위에서 아래로 계속 시도 할 것입니다. 당신이 "비 철저한 패턴의 경우에 얻을 수 있도록, onFalse, 때

case x of 
    'a' | on -> ... 
    'b' | on -> ... 
    'c' | on -> ... 
    _ | on -> ... 

따라서, 가지 중 어느 것도 선택 할 수 없습니다 : 당신의 예에서

, 모든 경우는 가드 표현 on이 "예외.