5

私が念頭に置いているのは次のようなものです:

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

(long-calculation vars)orに達したnil場合の結果を返します。time-limit

4

3 に答える 3

1

ボルドー スレッドを使用し、計算用のスレッドを生成し、タイマーによって返されない場合は、スレッドを取得して nil を返すことをお勧めします。

于 2011-09-20T17:54:48.233 に答える
1

あなたが望むことをしているように見えるこの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)

うまくいけば、これはあなたが自分自身を展開しなければならないのを助けるでしょう.

于 2011-11-07T23:07:29.617 に答える
1

ambオペレーターの実装を見つけることができれば、次のようなことができます。

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

ambこれを McCarthyオペレーターと間違えないように注意してください。amb両方の引数を別々のスレッドで評価し、最初に終了した方を選択する必要があります。たとえば、Haskell ではData.Unambに記述されています。

于 2011-09-16T16:27:41.443 に答える