操作をタイムアウトにする - lisp-cookbook-ja/common-lisp GitHub Wiki

スレッド ライブラリ portable-threads

操作をタイムアウトにする

タイムアウトについてはANSI仕様外ですが、大抵の処理系がwith-timeoutや、類似したものを持っています。 下記では、CLiki:Portable-Threadsを利用しています。

;; 書式
(with-timeout (seconds &body timeout-body) &body timed-body)
(import 'portable-threads:with-timeout)

;; 3秒でタイムアウト
(with-timeout (3 (print "時間切れ!"))
  (if (y-or-n-p "スフィンクスは、なぞなぞに答えられなくて死んだ~%")
      (print "はずれ")
      (print "はずれていない")))

;-> スフィンクスは、なぞなぞに答えられなくて死んだ
;   (y or n)
;  ... 3秒経過
;   "時間切れ!"
;=> "時間切れ!"

議論