1

我正在尝试本教程中给出的以下示例。

我无法理解的是案件如何保护案件'c'并且_根本不使用on

我修改了这里给出的代码,但是当我运行它时,我得到了错误“Non-exhaustive patterns in case”:

*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 回答