【发布时间】:2016-11-30 03:52:10
【问题描述】:
我刚刚编写了一个用于在井字游戏中移动的函数。我想推动模式匹配。所以我写了 9 个makeAMove 子句。每个人都有一个井字游戏板,不同的空间由空符号指定。它看起来像这样。
makeAMove [[E, m12, m13],
[m21, m22, m23],
[m31, m32, m33]] X 1 1 = ...
此子句将在棋盘的左上角放置一个 X。 X、O 和 E 被定义为标记。
data Mark = X | O | E deriving (Eq, Show)
当我加载文件时,我会收到此警告消息。
warning:
Pattern match checker exceeded (2000000) iterations in
an equation for ‘mov1’. (Use -fmax-pmcheck-iterations=n
to set the maximun number of iterations to n)
我的问题是出于好奇。模式匹配器在做什么类型的迭代?为什么需要这么多?
当我将子句的数量限制为 5 个并将其余部分放在另一个默认情况下链接的函数中时,没有问题。
【问题讨论】:
-
这要么是一个奇怪的 ghc 错误,要么是你的代码中非常奇怪的东西。请包含足够的代码来重现。你使用的是什么版本的 ghc?
-
您能否发布
mov1的模式,这似乎是导致错误的绑定? -
这似乎与模式穷举检查器明显相关。由于编译器的那部分最近受到了很多黑客攻击,因此了解 @jberryman 建议的 GHC 版本非常重要
标签: haskell pattern-matching ghc