処理の中断と放棄
「計算処理の一時停止」でキーボード操作による計算処理の一時停止の仕方を説明した.
場合によっては,停止操作をプログラムの中から直接行いたい.中断関数Interrupt[]を使えばそれができる.中断を行うと,「計算処理の一時停止」にあるように多くのシステムではメニューが表示されるので,そこから次に取る操作を対話的に選択することができる.
| Interrupt[] | 計算を途中で一時中断し保留状態にする |
| Abort[] | 計算を途中で放棄する |
| CheckAbort[expr,failexpr] | 式 expr を評価し結果を返す.評価が放棄された場合は failexpr を返す |
| AbortProtect[expr] | 式 expr の評価が終了するまで放棄が実行されないようにする |
関数Abort[]は,計算を一時中断し,中断メニューの放棄(
)を選択することに等しい.
Abort[]は,プログラムで「緊急停止」をさせたい箇所に挿入される.ただし,通常の式ではReturnやThrowを代りに使った方が,より制御性の高いプログラムを構築することができる.
式の評価を放棄すると,その式に関するすべての評価結果は無効になり,戻り値としては$Abortedが得られる.
関数CheckAbortを使えば,放棄の操作を差し止めることができる.CheckAbort[expr, failexpr]の書式で関数を式 expr に適用しておくと,CheckAbortがあっても,実際に評価は放棄されず,代りに式 failexpr が出力される.ダイアログ用の関数Dialog等ではCheckAbortが使われ放棄関数による実際の放棄操作が行われないようになっている.
洗練されたプログラムを構築する際には,放棄されては困る部分が出てくる.ダイアログによる対話的な放棄操作と,関数Abortを使った放棄操作はともに禁止にしておきたい.そのようなときは,AbortProtectを必要な部分に作用させておく.すると,放棄操作が起っても評価は続行され,評価終了時に,どんな放棄操作があったかが報告される.
AbortProtectを適用した式でも,CheckAbortを式の中に入れておくと,放棄操作が自動検出され,式 failexpr が評価される.failexpr にAbort[]の記述がない限り,放棄操作は無効になる.
