首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >纯函数超时

纯函数超时
EN

Stack Overflow用户
提问于 2012-04-09 17:52:10
回答 1查看 729关注 0票数 21

我怎么才能“杀死”一个耗时太长的纯计算呢?我试过了

代码语言:javascript
复制
import System.Timeout

fact 0 = 1
fact n = n * (fact $ n - 1)

main = do maybeNum <- timeout (10 ^ 7) $ (return . fact) 99999999
          print maybeNum

然而,这不起作用。用像getLine这样的“真实”IO函数替换(return . fact) 99999999,它就可以正常工作了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-09 18:08:13

重点是

代码语言:javascript
复制
return (fact 999999999)

立即返回,并且不触发超时。它返回一个thunk,稍后将对其进行计算。

如果强制计算返回值,

代码语言:javascript
复制
main = do maybeNum <- timeout (10 ^ 7) $ return $! fact 99999999
          print maybeNum

它应该触发超时(如果您提供了一个足够大的堆栈,以便在堆栈溢出之前发生超时)。

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10071560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档