对话

在标准交互式进程中,可以用 Wolfram 语言命令 Dialog 去建立一个子进程或者对话. 在进行计算的过程中,可以用对话与 Wolfram 语言相互作用. 像 "计算的跟踪" 中提到的一样,TraceDialog 在一个表达式计算的过程中的指定点自动调用 Dialog. 另外,在计算过程中要中断 Wolfram 语言时,一般用对话检查它的状态.

Dialog[]启动 Wolfram 语言对话
Dialog[expr]启动对话,将 expr 作为 的当前值
Return[]从对话返回,取 的当前值作为返回值
Return[expr]从对话返回,取 expr 作为返回值

启动对话和从对话返回.

启动一个对话.
In[1]:=
Click for copyable input
在对话中可以像在任何一个 Wolfram 语言进程中一样地进行计算.
In[2]:=
Click for copyable input
Out[2]=
Return 从一个对话中退出.
In[3]:=
Click for copyable input
Out[3]=

退出一个对话时,可以用 Return[expr] 返回一个对话值. 若用户不需要返回值,并且已经设置$IgnoreEOF=False 时,至少在基于文本界面的系统中可以用给出一个文件结束字符退出对话.

为计算这个表达式,Wolfram 语言启动一个对话.
In[4]:=
Click for copyable input
对话的返回值 现在被插入原来的表达式中.
In[5]:=
Click for copyable input
Out[5]=

在开始一个对话时,有一些初始表达式是有用的. 如果用 Dialog[expr],那么 Wolfram 语言就开始一个对话,将expr 作为初始表达式,可以按 的值访问.

开始一个有初始表达式 的对话.
In[6]:=
Click for copyable input
Out[6]=
是该对话中的初始表达式.
In[7]:=
Click for copyable input
Out[7]=
从第一个对话返回一个值,开始具有初始表达式 的第二个对话.
In[8]:=
Click for copyable input
Out[8]=
从第二个对话返回一个值,最后结果是有从这两个对话中插入值的原始表达式.
In[9]:=
Click for copyable input
Out[9]=

Dialog 通过标准 Wolfram 语言主循环的一个辅助版本工作. 所启动的每个对话从基本主循环继承各种值. 但有些值相对于该对话是局部的,退出对话时就恢复其原始值.

例如,启动对话时继承当前行数 $Line. 这意味着对话中的行数按主循环中的序号排列. 但是 $Line 的值相对应该对话是局部的. 于是,当退出该对话时,$Line 的值就恢复到它在主循环中的值.

如果在 Wolfram 语言进程的第 行开始一个对话,则该对话的第一行就标记为 In[11]. 对话的相继行就标记为 In[12]In[13] 等. 当退出对话时,在主循环中的下行将标记为 In[11]. 此时,仍然可以引用对话中所产生的结果 Out[11]Out[12] 等. 但这些结果当主循环进行到行 In[12]In[13] 等时就会被覆盖.

在一个标准 Wolfram 语言进程中,通过观察输入和输出行是否缩进可以判断是否处于一个对话中. 当从对话中再调用对话时,将缩进两个层次. 一般地,在 d 嵌套循环中的缩进由对象 DialogIndent[d] 的输出形式决定. 通过定义该对象的格式就可以指定在所用的 Wolfram 语言进程中的对话怎样缩进.

DialogSymbols:>{x,y,}其值相对于对话是局部的符号
DialogSymbols:>{x=x0,y=y0,}具有初始值的符号
DialogProlog:>expr在开始对话之前计算的表达式

Dialog 选项.

不论对 DialogSymbols 进行什么设置,Dialog 总是将 $Line$Epilog$MessageList 的值作为局部处理. 注意,对 $Epilog 给出一个值时,在退出对话时它就自动计算.

调用 Dialog 时首选局部化变量的值,然后计算对 DialogProlog 选项设置的任何表达式. 如果对 Dialog 函数明确给出了变量,接下来就计算它. 最后才实际开始该对话.

退出对话时可以明确用 Return[expr] 指定返回值. 不这样做时,返回值就是对话中最后产生的一个值.