ami*_*dfv 20 haskell timeout purely-functional
我如何"杀死"一个耗时太长的纯计算?我试过了
import System.Timeout
fact 0 = 1
fact n = n * (fact $ n - 1)
main = do maybeNum <- timeout (10 ^ 7) $ (return . fact) 99999999
print maybeNum
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用.替换(return . fact) 99999999为"真正的"IO功能getLine,这可以按预期工作.
Dan*_*her 21
关键在于
return (fact 999999999)
Run Code Online (Sandbox Code Playgroud)
立即返回并且不会触发超时.它返回一个将在稍后评估的thunk.
如果强制评估返回值,
main = do maybeNum <- timeout (10 ^ 7) $ return $! fact 99999999
print maybeNum
Run Code Online (Sandbox Code Playgroud)
它应该触发超时(如果你提供的堆栈足够大,以便在堆栈溢出之前发生超时).
| 归档时间: |
|
| 查看次数: |
649 次 |
| 最近记录: |