2012-09-19 86 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

case guard是一个布尔表达式,它在成功匹配相应模式后被检查。如果评估结果为True,则选择该分支。否则,Haskell将不断尝试从上到下的每个案例。

在你的榜样,所有的案件都护表达on

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

因此,当onFalse,可偏偏没有分支机构,所以你得到一个“非详尽模式的情况下, “例外。

相关问题