X秒后中止功能 - lisp

Lid*_*tas 3 lisp clisp common-lisp

我一直在寻找一种方法在lisp后X秒后停止一个函数,我没有找到任何东西,并且没有ideia如何做到这一点.

这是为了在俄罗斯方块游戏的功能上找到启发式权重,如果权重很差,程序将运行超过30秒,我不希望这样.请问有什么想法吗?

Vat*_*ine 7

一种可能的方法是传递"到期计时器"并检查当前时间是否晚于每次迭代中的到期时间,如果已经过期,则返回到目前为止的最佳解决方案.标准函数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))
Run Code Online (Sandbox Code Playgroud)

  • 我认为通过使用[`get-internal-real-time`](http://www.lispworks.com/documentation/HyperSpec/Body/f_get_in.htm),可以比使用时间粒度更精细. `获得的通用-time`. (3认同)

Rai*_*wig 7

Common Lisp有一个库:Trivial Timeout.

API很简单:Trivial Timeout API.