操作をタイムアウトにする - lisp-cookbook-ja/common-lisp GitHub Wiki
操作をタイムアウトにする
タイムアウトについては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秒経過
; "時間切れ!"
;=> "時間切れ!"