2011-09-16 71 views

回答

1

如果你能找到的amb操作的實現,那麼你可以做這樣的事情:

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

要小心,不要與麥卡錫amb操作者弄錯這一點。 amb應該在不同的線程中評估它的參數,並且首先選擇哪個完成。例如,在Haskell中,它在Data.Unamb中描述。

+1

謝謝。我希望實際上是一個amb的實現:)或者一個指向現有庫的指針。 – matejch

1

我會建議使用bordeaux線程,產生一個線程的計算,如果它不返回的計時器,收穫的線程和返回零。

1

中,似乎做你想做的野外發現這個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) 

希望這將幫助你不必推出自己的。

相關問題