Function BREAK
break &optional format-control &rest format-arguments => nil
format-control - format-control。デフォルトは実装依存。
format-arguments - format-arguments
breakは、format-controlとformat-argumentsをformatで出力し、 そのあとプログラムによるエラー捕捉の機能による 割り込みの可能性を一切許さずに 直接デバッガーに入ります。
もしcontinue restartがデバッガー内で使用されたときは、 何の異常状態の回復処理を行わずに breakは即座にnilを返却します。
breakはデバッガーに入ろうとする前に *debugger-hook*にnilを束縛します。
(break "You got here with arguments: ~:S." '(FOO 37 A))
>> BREAK: You got here with these arguments: FOO, 37, A.
>> To continue, type :CONTINUE followed by an option number:
>> 1: Return from BREAK.
>> 2: Top level.
>> Debug> :CONTINUE 1
>> Return from BREAK.
=> NILデバッガーに入ります。
なし。
breakは、エラーの通知を使用せず、 プログラムの「ブレークポイント」として 一時的にデバッグに入りたいときに使われます。 このような理由から、breakはcerrorが取るような continue-format-control引数を受け取りません。 この点と、コンディションの捕捉によって割り込みが生じるという可能性がない点が、 breakとcerror間のプログラムに見える違いです。
breakとcerrorのユーザーインターフェイスの外観は、 実装が必要とするインターフェイスにしたがって、 より大きく変えてしまっても許されます。 例えば、breakは従来のデバッガーではなく Lispのread-eval-print loopに入ってしまっても許されます。
breakは下記のように定義できます。
(defun break (&optional (format-control "Break") &rest format-arguments)
(with-simple-restart (continue "Return from BREAK.")
(let ((*debugger-hook* nil))
(invoke-debugger
(make-condition 'simple-condition
:format-control format-control
:format-arguments format-arguments))))
nil)