我一直在寻找一种在 lisp 上 X 秒后停止函数的方法,但我没有找到任何东西,也不知道如何去做。

这是为了在俄罗斯方块游戏的函数上找到启发式权重,如果权重不好,程序将运行超过 30 秒,我不希望那样。有什么想法吗?

最佳答案

一种可能的方法是传递“到期计时器”,并检查当前时间是否在每次迭代中都晚于到期时间,如果已到期,则返回到目前为止的最佳解决方案。标准函数get-universal-time可能很有用,但为您提供最小的秒粒度。下面是一个粗糙的骨架。如果您使用递归函数,则只需将过期计时器与您传递的其他任何内容一起递减,然后将其用作您的第一个递归终止条件。

(defun do-tetris-stuff (tetris-weights expiry-time)
  (let ((best-solution nil))
    (loop while (and (<= expiry-time (get-universal-time))
                     (not (good-enough-p best-solution)))
          do (let ((next-solution ...))
               (when (better-than-p next-solution best-solution)
                 (setf best-solution next-solution))))
    best-solution))

关于lisp - X 秒后中止函数 - lisp,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34003597/

10-10 00:55