X秒后中止功能 - lisp

时间:2015-11-30 16:43:38

标签: lisp common-lisp clisp

我一直在寻找一种在lisp后X秒停止功能的方法,但我还没有找到任何东西,并且没有想法如何去做。

用于在俄罗斯方块游戏的功能上找到启发式权重,如果权重不好,程序将运行超过30秒,我不想要这样。请问任何想法?

2 个答案:

答案 0 :(得分:7)

一种可能的方法是传递一个"到期计时器"并检查当前时间是否晚于每次迭代的到期时间,如果已经过期,则返回到目前为止的最佳解决方案。标准函数get-universal-time可能很有用,但会为您提供最小的秒数。下面粗糙的骨架。如果你使用递归函数,只需将你到达的其他任何内容传递给expiry定时器,并将其用作你的第一个递归终止标准。

(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))

答案 1 :(得分:7)

Common Lisp有一个库:Trivial Timeout

API很简单:Trivial Timeout API