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

2.13.1 主循环

在任何进程中,Mathematica 循环运行. 它等待输入, 处理输入, 显示结果, 然后再返回来等待新的输入. 作为这个主循环的一部分,Mathematica 保持 和使用各种全局对象,用这些对象工作常常是很有用的.
但是要清楚,通过某一特定前端使用 Mathematica 时,该前端会建立 自己的主循环,本节所叙述的内容不一定适用.

输入输出表达式

在标准的交互进程中有一个输入和输出行序列. Mathematica 将这些行的表达式值存放在 In[n]Out[n] 中.
像通常由 "In[n]:=提示" 所表明的一样,输入表达式用 延时赋值存放. 这意味着每次需要 In[n] 时,这一输入表达式将 在当前环境中重新计算.

这里对 x 赋一个值

现在使用 x 的值

这里删除 x 的值

在当前环境中重新计算,对 x 没有赋任何值

这里给出第二个输入行的文本形式,它适合于编辑和其它文本操作

Out[5]//InputForm=

指定要保持的进程历史长度

Mathematica 默认保存进程过程中所有输入和输出行. 在很长的进程中, 这会占用大量的计算机内存. 但通过使用 Unprotect[In, Out], 后跟 Clear[In, Out] 明显清除 InOut 的值可以删除输入和输出行. 通过设置全局 变量 $HistoryLength 也可以令 Mathematica 保存前面的有限行.
注意在一个进程的任何点,可以重新设置行计数器 $Line,这样就可以用新 行去覆盖前面的行.

在主循环中使用的全局函数

Mathematica 提供了各种 "挂钩" 以便插入用于主循环各个阶段表达式的函数. 例如,赋以全局变量 $Pre 的值的函数在任何输入的表达式计算之前自动使用.
对一个特定输入行而言,标准的主循环从得到一个输入文本字符串开始. 特别是需要处理特殊字符串时,有可能在Mathematica 进一步加工之前需要修改这个 文本字符串. 这可以通过将一个函数赋以全局变量 $PreRead 的值来实现. 该函数将作用于这个字符串,其结果将作为这个特殊输入行 实际的输入字符串.

这里令 Mathematica 在每个输入字符串中用  ...  代替 << ... >>

现在就可以将花括号当作尖角括号输入

当不修改输入字符串的值时,可以用这一种方式删除 $PreRead 的定义

输入字符串由 $PreRead 处理完后就由 Mathematica 读入.这时 Mathematica 可能会发现字符串中有语法错误. 当错误出现时就调用指定为 $SyntaxHandler 值的函数. 它使用两个变量:这个输入字符串和出现语法错误的字符串 位置.用$SyntaxHandler 可以分析语法错误或调用一个编辑器. 当所用函数 返回一个字符串时,Mathematica 就将这个字符串作为新的输入字符串.

这里指出发生语法错误时 Mathematica 应该做什么

这个输入产生了一个语法错误

Mathematica 读入一个表达式成功后就计算它.在计算之前,Mathematica 使用指定为 $Pre 值的函数,计算之后它使用指定为$Post 值的函数. 注意,除非 $Pre 函数保持它的变量不计算,该函数与 $Post 有相同的效果.
$Post 用来给出从 Mathematica 所得结果的后处理. 例如,为了使用 Mathematica 得到所产生结果的近似值,需要设置$Post=N.

这里令 Mathematica 对每个结果使用函数 N

现在 Mathematica 对任何输入进行近似

这里删除所给定的后处理函数

Mathematica 产生结果后使用某个指定的 $Post 函数,然后取出结果赋于 Out[$Line]. 下一步 Mathematica 显示该结果,但在这之前要使用某个指定为 $PrePrint 值的函数.

这里令 Mathematica 将所有输出缩短为 2 行

仅显示了 2 行形式的输出

这里删除赋于 $PrePrint 的值

在一般的 Mathematica 进程中产生各种类型的输出. 每一种类型的输出送往确 定的输出通道. 每一个输出通道有一个全局变量,它给出要包含在这个输出通道 中的输出流列表.

在标准 Mathematica 对话中的输出通道

通过修改在给定输出通道中的流列表,可以重新定向或复制特定类型的 Mathematica 输出. 例如,通过打开一个到文件的输入流, 且将它包含在 $Echo 列表中, 就可以将每个对 Mathematica 的输入存在一个文件中.

在 Mathematica 进程中打开流

函数 Streams 显示所有输入, 输出和在一个 Mathematica 进程中的某一点打开的 其它流. 变量 $Input 给出特定点Mathematica 输入流的名称. 在 Get 合作的执行 过程中,重新设置 $Input.

信息参数

有各种确定 Mathematica 所产生信息形式的全局参数.
2.8.21 节讨论的一样,典型的信息包含一个表达式序列,它们与 StringForm 的信息文本相结合. $MessagePrePrint给出了在显示之前作用于表达式的函数. $MessagePrePrint 的默认值是 Short.
2.8.22 节讨论的一样,在 Mathematica 中可以指定信息所使用的语言. 在一个 Mathematica 进程中,可以把一个语言名列表指定为 $Language 的值.

结束 Mathematica 进程

在明确告诉退出之前 Mathematica 将一直进行主循环. 大部分 Mathematica 界面 提供了退出的特殊方法. 但总可以调用 Exit Quit 退出.
Mathematica 允许对全局变量 $Epilog 给出一个值去指定 Mathematica 实际退出之前进行的运算. 用这种方法可以让Mathematica 在退出之前保存某些对象.

决定处理文件结束字符的全局变量

像在 2.7.5 节中讨论的一样,Mathematica 通常并不按特殊方式处理特殊字符. 但可能有一个例外. 用默认设置$IgnoreEOF=False, Mathematica 能识别文 件结束字符. 当在标准交互 Mathematica 进程的一个输入行仅接收到一个 文件结束字符时,Mathematica 就退出这个进程.
怎样输入文件结束字符依赖于所使用的计算机系统. 例如,在 Unix 中, 一般用 Control-D.
注意,如果在批处理模式下使用 Mathematica,其中所有的输入来源于 一个文件,不管 $IgnoreEOF 的值如何, 到文件结束就自动退出.