1

このチュートリアルで与えられた次の例を試していました。

私が理解できなかったのは、ケースがケースをどのように保護し、'c'まったく_使用しないかということonです?

hereのようにコードを変更しましたが、実行すると「ケースの非網羅的なパターン」というエラーが表示されました。

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

これはなぜですか?

4

1 に答える 1

6

ケース ガードはブール式であり、対応するパターンの照合に成功した後にチェックされます。と評価された場合True、そのブランチが選択されます。それ以外の場合、Haskell は各ケースを上から下まで試行し続けます。

あなたの例では、すべてのケースにガード式がありますon:

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

したがって、onisの場合False、どのブランチも選択できないため、「ケースの非網羅的なパターン」例外が発生します。

于 2012-09-19T05:27:01.303 に答える