【发布时间】:2011-02-11 00:31:28
【问题描述】:
我想知道是否有人对如何制作一个将获取列表并仅返回可在 x 时间内生成的术语的函数有任何见解。
例如,我有一个函数需要大约 10 分钟才能返回几个术语。与其猜测我能生成多少项(使用 x ),我只想将一个无限列表输入到我的低效函数中,并让一个单独的函数决定何时超时。
所以是这样的:[5,7,10] = takeUntilTime (10 sec) . inefficientFunction $ [1..]
我对 haskell 很陌生,但我认为我可以编写该函数来在每个新术语生成后检查计时器,如果时间已过则停止。
但是,如果第四个任期是永恒的呢?有没有办法阻止 inefficientFunction 完成第 4 项的生成,即使它已经开始了?
我对一个直截了当的答案寄予厚望,但我很欣赏对此的任何直觉。谢谢。
【问题讨论】:
-
您想要一个计时器来中断某些值的计算?好吧,我还不知道你想要什么,但它必须是一个 IO 操作。没有纯函数可以做到这一点。
-
具体用例?这是一个有趣的问题,但你为什么要在“现实世界”中这样做呢?
-
我最近一直在做 ProjectEuler(projecteuler.net),我喜欢生成快速的实验序列并在 oeis.org 上引用它们。例如,有一些问题的本质是您将长度为 1、2、3 等的棍子首尾相连,然后在这些棍子旁边放置长度为 3、5 等的棍子。问题是找到棍子排列的空间。如果您采用一种简单的方法(即保持运行总数),您几乎无法生成 19 个术语。 (oeis.org/search?q=2,5,15,32,90,189,527,1104,3074,6437) (问题还有很多,所以我没有作弊:))
标签: haskell functional-programming