私が念頭に置いているのは次のようなものです:
(run (long-calculation vars) time-limit)
(long-calculation vars)
orに達したnil
場合の結果を返します。time-limit
私が念頭に置いているのは次のようなものです:
(run (long-calculation vars) time-limit)
(long-calculation vars)
orに達したnil
場合の結果を返します。time-limit
ボルドー スレッドを使用し、計算用のスレッドを生成し、タイマーによって返されない場合は、スレッドを取得して nil を返すことをお勧めします。
あなたが望むことをしているように見えるこの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)
うまくいけば、これはあなたが自分自身を展開しなければならないのを助けるでしょう.
amb
オペレーターの実装を見つけることができれば、次のようなことができます。
(defmacro run (comp time-limit)
`(amb comp
(progn (delay ,time-limit)
nil)))
amb
これを McCarthyオペレーターと間違えないように注意してください。amb
両方の引数を別々のスレッドで評価し、最初に終了した方を選択する必要があります。たとえば、Haskell ではData.Unambに記述されています。