処理の中断と放棄

「計算処理の一時停止」でキーボード操作による計算処理の一時停止の仕方を説明した.

場合によっては,停止操作をプログラムの中から直接行いたい.中断関数Interrupt[]を使えばそれができる.中断を行うと,「計算処理の一時停止」にあるように多くのシステムではメニューが表示されるので,そこから次に取る操作を対話的に選択することができる.

Interrupt[]計算を途中で一時中断し保留状態にする
Abort[]計算を途中で放棄する
CheckAbort[expr,failexpr]expr を評価し結果を返す.評価が放棄された場合は failexpr を返す
AbortProtect[expr]expr の評価が終了するまで放棄が実行されないようにする

計算処理の中断と放棄

関数Abort[]は,計算を一時中断し,中断メニューの放棄()を選択することに等しい.

Abort[]は,プログラムで「緊急停止」をさせたい箇所に挿入される.ただし,通常の式ではReturnThrowを代りに使った方が,より制御性の高いプログラムを構築することができる.

Abortを使い途中で処理を終える.最初のPrintだけが実行される.
In[1]:=
Click for copyable input
Out[1]=

式の評価を放棄すると,その式に関するすべての評価結果は無効になり,戻り値としては$Abortedが得られる.

関数CheckAbortを使えば,放棄の操作を差し止めることができる.CheckAbort[expr,failexpr]の書式で関数を式 expr に適用しておくと,CheckAbortがあっても,実際に評価は放棄されず,代りに式 failexpr が出力される.ダイアログ用の関数Dialog等ではCheckAbortが使われ放棄関数による実際の放棄操作が行われないようになっている.

CheckAbortを作用させ,放棄操作をキャッチさせる.が出力され値が返されて評価が放棄されたことが分かる.
In[2]:=
Click for copyable input
Out[2]=
CheckAbortを使ったので,Abortに当たっても放棄されず,が出力される.

洗練されたプログラムを構築する際には,放棄されては困る部分が出てくる.ダイアログによる対話的な放棄操作と,関数Abortを使った放棄操作はともに禁止にしておきたい.そのようなときは,AbortProtectを必要な部分に作用させておく.すると,放棄操作が起っても評価は続行され,評価終了時に,どんな放棄操作があったかが報告される.

AbortProtectを作用させ,Abortに当たっても評価を実行させる.評価完了時に放棄操作があったことが表示される.
In[4]:=
Click for copyable input
Out[4]=
CheckAbortで放棄されたことが検知されるが,処理自体は停止せず,次の式Printが実行される.

AbortProtectを適用した式でも,CheckAbortを式の中に入れておくと,放棄操作が自動検出され,式 failexpr が評価される.failexprAbort[]の記述がない限り,放棄操作は無効になる.