【问题标题】:How to implement a time limited execution mechanism in CLISP?如何在CLISP中实现限时执行机制?
【发布时间】:2011-09-16 10:46:59
【问题描述】:

我的想法是这样的:

(run (long-calculation vars) time-limit)

如果达到time-limit,则返回(long-calculation vars)nil 的结果。

【问题讨论】:

  • 这取决于实现。你使用什么 Lisp 实现?

标签: lisp common-lisp clisp


【解决方案1】:

如果您可以找到 amb 运算符的实现,那么您可以执行以下操作:

(defmacro run (comp time-limit)
  `(amb comp
       (progn (delay ,time-limit)
              nil)))

注意不要将其与 McCarthy amb 运算符混淆。 amb 应该在单独的线程中评估它的两个参数,然后选择先完成的那个。例如,在 Haskell 中,它在 Data.Unamb 中进行了描述。

【讨论】:

  • 谢谢。我实际上希望实现 amb :) 或指向现有库的指针。
【解决方案2】:

我建议使用 bordeaux-threads,生成一个线程进行计算,如果计时器没有返回,则获取线程并返回 nil。

【讨论】:

    【解决方案3】:

    在野外发现这个 lisp 代码似乎可以满足您的需求:

    http://www.eurogaran.com/downloads/lisp/limitools/limitime.lsp

    我启动了“Clozure Common Lisp Version 1.7-r14925M (DarwinX8664)”,将该站点中的 lisp 代码粘贴到侦听器中(全部编译),然后运行:

    ? (with-max-time 1 (print 5))
    
    5 
    5
    ? (with-max-time 1 (sleep 2) (print 5))
    ? (quit)
    

    希望这将帮助您不必推出自己的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-26
      • 1970-01-01
      • 2012-12-06
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 2016-07-06
      相关资源
      最近更新 更多