我心目中什麼是一樣的東西:如何在CLISP中實現時間有限的執行機制?
(run (long-calculation vars) time-limit)
如果達到time-limit
返回的(long-calculation vars)
或nil
結果。
我心目中什麼是一樣的東西:如何在CLISP中實現時間有限的執行機制?
(run (long-calculation vars) time-limit)
如果達到time-limit
返回的(long-calculation vars)
或nil
結果。
如果你能找到的amb
操作的實現,那麼你可以做這樣的事情:
(defmacro run (comp time-limit)
`(amb comp
(progn (delay ,time-limit)
nil)))
要小心,不要與麥卡錫amb
操作者弄錯這一點。 amb
應該在不同的線程中評估它的參數,並且首先選擇哪個完成。例如,在Haskell中,它在Data.Unamb中描述。
謝謝。我希望實際上是一個amb的實現:)或者一個指向現有庫的指針。 – matejch
我會建議使用bordeaux線程,產生一個線程的計算,如果它不返回的計時器,收穫的線程和返回零。
中,似乎做你想做的野外發現這個Lisp代碼出來:
http://www.eurogaran.com/downloads/lisp/limitools/limitime.lsp
我發起了 'Clozure Common Lisp的版本1.7 r14925M(DarwinX8664)' 中,粘貼在Lisp代碼在站點進入聽衆(這一切編譯),並跑了這個:
? (with-max-time 1 (print 5))
5
5
? (with-max-time 1 (sleep 2) (print 5))
? (quit)
希望這將幫助你不必推出自己的。
這是依賴於實現的。你使用什麼Lisp實現? –