Function INVOKE-RESTART-INTERACTIVELY
invoke-restart-interactively restart => result*
restart - restart指定子
result - restartに関係づいた関数による返却値(もしあるなら)。
invoke-restart-interactivelyは、 restartに関連づいた関数を呼び出し、 呼び出しに必要な引数はプロンプトによって問い合わせます。 restartは現在の動的環境下で有効なものでなければなりません。
invoke-restart-interactivelyは、 引数の問い合わせを restart-caseの:interactiveキーワードか、 restart-bindの:interactive-functionキーワードで 提供されたコードを実行することで行います。
もしそのようなオプションが 対応するrestart-bindとrestart-caseに 指定されなかったときは、 もしrestartが要求引数を取っていたときの結果は未定義です。 もし引数がオプションであるときは、 リストのnilが使用されます。
いったん引数が決定すると、 invoke-restart-interactivelyは 次のように実行を行います。
(apply #'invoke-restart restart arguments)(defun add3 (x) (check-type x number) (+ x 3))
(add3 'seven)
>> Error: The value SEVEN was not of type NUMBER.
>> To continue, type :CONTINUE followed by an option number:
>> 1: Specify a different value to use.
>> 2: Return to Lisp Toplevel.
>> Debug> (invoke-restart-interactively 'store-value)
>> Type a form to evaluate and use: 7
=> 10もし必要な引数の問い合わせが生じると、 キーボードなどのタイプによる入力が生じます(query-io上で)。
restartによって非局所的な遷移の制御が行われるかもしれません。
有効なrestart
restartが有効なものでないときは、 型control-errorのエラーが生じます。
find-restart, invoke-restart, restart-case, restart-bind
invoke-restart-interactivelyは デバッガーの内部で使用されますし、 他の移植可能な対話式デバッグツールが実装されて、 使用されるかもしれません。