ダイアログ

計算を進めていく途中でカーネル処理の中間過程を追うことができると,式がどう計算されるかが分かるため便利である.標準対話セッションでは,コマンドDialogを使いダイアログ(二次セッション)を設け中間処理を追跡できるようになっている.「評価処理のトレース」で説明したように,評価する式にTraceDialogを入れておくと,挿入部が評価される際にDialogが自動的に呼び出され中間結果を参照できるようになる.また,計算中にカーネルを一時停止させた場合も,ダイアログを開き計算状況を参照できるようになっている.

Dialog[]ダイアログを開始する
Dialog[expr]expr の現行値として,ダイアログを開始する
Return[] の現行値を戻り値としてダイアログを終了する
Return[expr]expr の現行値を戻り値としてダイアログを終了する

ダイアログの開始と終了

ダイアログを開始する.
In[1]:=
Click for copyable input
通常のセッションと同じようにダイアログの中でも計算させることが可能である.
In[2]:=
Click for copyable input
Out[2]=
Returnでダイアログを終了させる.
In[3]:=
Click for copyable input
Out[3]=

ダイアログを終了する際に,コマンド書式Return[expr]を使い式を指定しておくと,その式を計算させ,計算値をダイアログの戻り値として得ることができる.戻り値が必要なく,また,$IgnoreEOF=Falseの条件が設定してあるなら,EOFを入力するだけでダイアログを止めることができる.ただし,この操作はテキスト型インターフェースに限る.

計算したい式にダイアログコマンドを使う.すると,ダイアログが開始する.
In[4]:=
Click for copyable input
ダイアログからの値が返ってくる.その値がもとの式に挿入される.
In[5]:=
Click for copyable input
Out[5]=

ダイアログを開始する上で,「初期式」を与えられると便利である.Dialog[expr]を使うことで,expr を初期式とするダイアログを設けることができる.この式をダイアログの中で参照するには を使う.

ダイアログを続けて開く.最初のダイアログでは,初期式に式を使う.
In[6]:=
Click for copyable input
Out[6]=
ダイアログで初期式を参照するには とすればよい.
In[7]:=
Click for copyable input
Out[7]=
第1ダイアログを終了させる.戻り値が戻ってきて,第2ダイアログが始まる.今度はが初期式である.
In[8]:=
Click for copyable input
Out[8]=
第2ダイアログを終える.結果として両ダイアログから得た値を代入した形のもとの式が得られる.
In[9]:=
Click for copyable input
Out[9]=

Dialogでは,Wolfram言語の標準メインループに従った二次的なループが使われ,メインループと同様な処理が行われる.動作環境の設定として,メインループで設定してある各種の現行値が継承される.ダイアログだけで局所的に有効な設定値も中にはあるので,それらに関しては,ダイアログの終了時にもとの値に戻される.

例えば,ダイアログが開始すると,行番号にはメインの$Lineにある現行値が継承される.すなわち,ダイアログの行番号はメインループで使われた最終番号に続く番号が使われる.しかし,ダイアログ自体の$Lineは局所的に有効なだけなので,ダイアログを終了しメインに戻ったなら,メインでの$Lineはもとの最終番号になる.

行番号の入力でダイアログを始めると,ダイアログの最初の入力行にはIn[11]が付けられる.続く行にはIn[12]In[13]と行番号が付けられる.また,ダイアログを終了すると,メインにおける次の行番号は再びIn[11]になる.この時点でなら,ダイアログで得た結果はOut[11]Out[12]の指定で参照が可能である.それでも,一度,メインでIn[12]In[13]の入力行が使われると,同じ行番号のダイアログ結果は上書きされなくなってしまう.

標準セッションにおいて,ダイアログにいるのかいないのかは,入出力行がインデントしているかどうかを見ることで判断することができる.ダイアログからもう1つダイアログを開くと,2種類のインデントを得る.つまり,ネストしたダイアログを使うと,レベル d のダイアログ行にはオブジェクトDialogIndent[d]に指定済みの出力書式に準じたインデントが行われる.ダイアログ行の表示の仕方を変えたければインデント書式を変更すればよい.

DialogSymbols:>{x,y,}現行ダイアログだけに有効な局所値を持つシンボルを指定する
DialogSymbols:>{x=x0,y=y0,}初期値を持つシンボルを指定する
DialogProlog:>exprダイアログ開始前に評価しておく式を指定する

Dialogのオプション

DialogSymbolsに何を指定しても,Dialogにおける$Line$Epilog$MessageListの設定値はそのダイアログだけで有効である.また,$Epilogに後処理を指定しておくと,それはダイアログが終了する際に自動的に行われる.

Dialogを呼び出した後に最初に行われるのが変数の局所化である.次に,オプションDialogPrologに指定した前処理が実行される.また,Dialogに引数を与えた場合は,前処理の次に引数が評価される.これらの処理の後に実際のダイアログが開始する.

Return[expr]のコマンド書式を使いダイアログを終了させると,式を戻り値として得ることができる.特に式を指定しなければダイアログで最後に得られた結果が戻り値になる.