Function COMPUTE-RESTARTS
compute-restarts
&optional
condition => restarts
condition - コンディションオブジェクトか、nil
restarts - restart
のリスト
compute-restarts
はそのプログラムの動的状態から 現在有効のrestart
のリストを計算するときに使われます。
結果のリストには順番があり、 もっとも内側(より最近確立されたもの)のrestart
が リストの先頭に近いものになります。
もしconditionがnil
ではないときは、 それらのrestart
は、明にconditionと関連付けられているものか、 あるいはどのコンディションにも関連付けられてないものかの どちらかのみが集められます。 これは、排他されたrestart
というのは、 関連付けられたコンディションの集合が空ではなく、 その要素に指定したconditionが含まれていないということです。 もしconditionがnil
のときは、 全てのrestart
が集められます。
compute-restarts
は全ての適用可能なrestart
が返却され、 それには匿名のものや、 あるものが他のものと同じ名前のものも含まれるため、 したがってfind-restart
の引数にシンボルを指定したものでは 見つけることができないものも含まれます。
実装は、同じ動的環境下でcompute-restarts
を繰り返し呼び出したときに、 違うリストを返却することが許されますが、必須ではありません。 compute-restarts
によって返却されたリストを 全て変更したときの結果は未定義です。
Examples:
;; ユーザーへrestartを表示させるような
;; 対話式デバッガーのひとつの方法
defun invoke-a-restart ()
(let ((restarts (compute-restarts)))
(do ((i 0 (+ i 1)) (r restarts (cdr r))) ((null r))
(format t "~&~D: ~A~%" i (car r)))
(let ((n nil) (k (length restarts)))
(loop (when (and (typep n 'integer) (>= n 0) (< n k))
(return t))
(format t "~&Option: ")
(setq n (read))
(fresh-line))
(invoke-restart-interactively (nth n restarts)))))
(
restart-case (invoke-a-restart)
(1)
(one () 2)
(two () nil () :report "Who knows?" 'anonymous)
(
(one () 'I)
(two () 'II))0: ONE
>> 1: TWO
>> 2: Who knows?
>> 3: ONE
>> 4: TWO
>> 5: Return to Lisp Toplevel.
>> 4
>> Option: => II
;; ユーザー定義のrestartを追加した地点では、COMPUTE-RESTARTは
;; システムが用意したrestartの情報も返却してしまうことに注意してください。
;; 例えば上記の"Return to Lisp Toplevel"がそうです。
なし。
存在するrestart
なし。
find-restart
, invoke-restart
, restart-bind
なし。