Wolfram ResearchPRODUCTSPURCHASEFOR USERSCOMPANYOUR SITES
THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.

Documentation / Mathematica / Mathematicaブック / Mathematicaの仕組み / 式の評価 /

2.6.14 発展:処理の割込みと中断

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

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

計算処理の割込みと中断

Abort[ ]の機能は,計算において割込みを発生させ,一時停止のメニューからコマンド「中断」を選択することに等しい.

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

Abortを使い途中で処理を終える.最初のPrintだけが実行される.

In[1]:= Print[a]; Abort[ ]; Print[b]

Out[1]=

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

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

CheckAbortを作用させ,中断操作をキャッチさせる.値abortedが出力され評価が中断したことが分かる.

In[2]:= CheckAbort[Print[a]; Abort[ ]; Print[b], Print[c]; aborted]

Out[2]=

CheckAbortを使ったので,Abortに当たっても中断せず,2番目のPrintが実行される.

In[3]:= CheckAbort[Print[a]; Abort[ ], Print[c]; aborted]; Print[b]

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

AbortProtectを作用させ,Abortに当たっても評価を実行させる.評価完了時に中断操作があったことが表示される.

In[4]:= AbortProtect[Abort[ ]; Print[a]]; Print[b]

Out[4]=

CheckAbortで中断したことが検知されるが,処理自体は停止せず,次の式Print が実行される.

In[5]:= AbortProtect[Abort[ ]; CheckAbort[Print[a], x]]; Print[b]

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



Any questions about topics on this page? Click here to get an individual response.Buy NowMore Information


 © 2008 Wolfram Research, Inc.  Terms of Use  Privacy Policy |
Sign up for our newsletter: