【发布时间】:2019-06-04 20:05:00
【问题描述】:
我目前正在阅读“Haskell Programming from first principle”,在关于 bottom 的部分中有一段内容如下:
让我们检查一下我们可以在程序中找到底部的几种方法:
Prelude> let x = x in x*** 例外:>
这里 GHCi 检测到 let x = x in x 永远不会返回,并将永无止境的短路 计算。这是一个底部的例子,因为它永远不会发生 返回结果。 请注意,如果您使用的是 Windows 计算机,则此 示例可能会冻结您的 GHCi 而不会引发异常。
我的问题是:Windows 是否有任何固有的东西使得无法或难以检测到这个循环,或者它只是特定于 GHC(i) 实现?
【问题讨论】:
-
我相信这与使用单线程运行时还是多线程运行时有关。
-
您是否明白,一般来说,detect non-termination 是不可能? Haskell 只在某些偶然的情况下成功,而且它绝对不提供任何关于能够检测到非终止的保证(因为它不能)。
-
这与Halting problem 本质上是相反的(你可以说它是“循环问题”),尽管对于某些情况有求解器 的停机问题,一般来说是一个不可判定的问题。