此为 Mathematica 4 文档,内容基于更早版本的 Wolfram 语言
查看最新文档(版本11.2)

2.13.2 对话

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

起动对话和从对话返回

起动一个对话

在对话中可以像在任何一个 Mathematica 进程中一样地进行计算

Return 从一个对话中退出

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

为计算这个表达式,Mathematica 起动一个对话

对话的返回值 a+b 现在被插入原来的表达式中

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

开始一个有初始表达式 a^2 的对话

% 是该对话中的初始表达式

从第一个对话返回一个值,开始具有初始表达式 b+c 的第二个对话

从第二个对话返回一个值,最后结果是有从这两个对话中插入值的原始表达式

Dialog 通过标准 Mathematica 主循环的一个辅助版本工作. 所起动的每个对话从基本 主循环继承各种值. 但有些值相对于该对话是局部的,退出对话时就恢复 其原始值.
例如,起动对话时继承当前行数 $Line. 这意味着对话中的行数按主循环中的 序号排列. 但 $Line 的值相对于该对话是局部的.于是当退出该对话时, $Line 的值就恢复到它在主循环中的值.
如果在 Mathematica 进程的第 10 行开始一个对话,则该对话的第一行 就标记为 In[11]. 对话的相继行就标记为 In[12], In[13] 等. 当退出对话时,在主循环中的下行将标记为 In[11]. 此时仍然可以引用 对话中所产生的结果 Out[11], Out[12] 等.但这些结果当主循环进行到行 In[12], In[13] 等时就会被覆盖.
在一个标准 Mathematica 进程中,通过观察输入和辅出行是否缩进可以判断 是否处于一个对话中.当从对话中再调用对话时,将缩进两个层次.一般地, 在 嵌套循环中的缩进由对象 DialogIndent[d] 的输出形式决定. 通过定义该对象的格式就可以指定在所用的 Mathematica 进程 中的对话怎样缩进.

对话选项

不论对 DialogSymbols 进行什么设值,Dialog 总是将 $Line, $Epilog $MessageList 的值作为局部处理.对$Epilog 给出一个值时,在退出对话 时它就自动计算.
调用 Dialog 时首选局部化变量的值,然后计算对 DialogProlog 选项设置的 任何表达式. 如果对 Dialog 函数明确给出了变量,接下来就计算它.最后 才实际开始该对话.
退出对话时可以明确用 Return[expr] 指定返回值. 不这样做时, 返回值就是对话中最后产生的一个值.