Mathematica 9 is now available

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 的值如何, 到文件结束就自动退出.



Any questions about topics on this page? Click here to get an individual response.Buy NowMore Information
THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.