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

2.8.21 信息

Mathematica 有处理计算中所产生信息的机制. 许多 Mathematica 内部函数 用这种机制产生错误和警告信息. 这种机制可以用于自定义函数的 信息.
基本思想是每条信息有一个确定的名称,形式为 symbol::tag. 可以 用这些名称指代信息 (对象 symbol::tag 的头部为 MessageName).

控制信息的显示

1.3.11 节所示,可以用 OnOff 来控制信息的显示. 大部分内部函数的有关信息默认是打 开的. 可以用 Off 去关闭不需要查看的信息.

这里显示一个警告信息

可以用这种方式关闭该信

息现在就不产生警告信息

尽管大部分与内部函数有关的信息默认是打开的,但也有些是关闭的,要 明确打开才能显示. 一个例子是信息 General::newsym, 它表明 产生了新符号.

信息的操作

名为  赋值 设置信息.

当给 LinearSolve 输入一个奇异矩阵时,它就显示一个警告信息

这是信息的内容

这里重新定义信息

这里将用新形式

信息总是以适用于 StringForm 的字符串存放. 当需要显示时,一些相应的表达式就 拼接成该信息. 这些表达式用 HoldForm 封装,以防止它被计算. 此外,任何被指定 为全局变量 $MessagePrePrint 的函数在它们被交给 StringForm 之前作用于这些表达式. $MessagePrePrint 的默认值是 Short.
大部分信息与产生它们的函数有关,但也有一些一般信息,各种函数 都产生这些信息. 当给函数F的变量数目不正确时,Mathematica 将 显示警告信息 F::argx. 如果 Mathematica 找不到命名为 F::argx 的信息时, 它就用一般信息 General::argx 代替. 可以用 Off[F::argx] 关闭对函数 F 的变量 计数的信息,也可以 Off[General::argx] 关闭一般信息文本所使用的所有信息.

当对内部函数给出的变量个数有误时,Mathematica 就显示一个信息

这个变量计数信息是一个一般信息,许多函数都使用它

当计算中出现严重错误时,就会发现同样的警告信息反复出现, 这会导致混乱. 于是 Mathematica 就跟踪一个计算过程中的所有信息, 当一条信息重复出现 3 次时就不再显示它. 当这一情况发生时, Mathematica 就显示信息 General::stop 去提醒用户. 如果需要查看将显示的所有信息, 就要关闭General::stop.

找出计算过程中所产生的信息

在每一个计算中,Mathematica 将所产生的全部信息放在列表 $MessageList 中. 在标准的 Mathematica 进程中,每一行的输出产生后就清除这个信息 列表,但在计算过程中可以访问这个列表. 另外,在一个进程中第 行的输出产生时,$MessageList 的值就赋给 MessageList[ ].

这里返回 $MessageList 它给出了所产生信息的列表

信息名由 HoldForm 封装,以保持它们不被计算

Out[11]//InputForm=

在编辑时需要知道一个计算过程中是否产生了信息. 当产生了一些信息时 ,例如产生了一些不确定的数值结果,计算的结果 可能就失去了意义.

检查警告信息

计算 1^0 时不产生信息,返回值就是计算结果

计算 0^0 时产生信息,所以返回值是 Check 的第 2 个变量

Check[expr, failexpr] 测试实际显示的所有信息, 并不测试用 Off 关闭而未显示的信息. 有时仅 需要测试某一些特定信息,如与数值溢出有关的信息,这就需要告诉 Check 所需要测试的信息名.

Sin[1,2] 产生的信息被 Check 忽略,因为它不是所指定的信息

产生信息

Message 函数可以模仿内部函数信息的各种方式. 用 OnOff 打开或关闭信息, Message 找不到指定信息 s::tag 时就自动寻找 General::tag .

这里定义了与 f 有关的信息内容

这里给出函数 f

f 的变量多于 10 时就产生信息

这里关闭信息

现在就不再显示所产生的信息

调用 Message 时,它先找指定名称的信息,找不到时它找一个与 General 相关 的比较合适的信息名. 再找不到时,Mathematica 就将你所定义的任意函数作全局 变量 $NewMessage 的值,且将该函数作用到你所要求信息的记号上. 通过对 $NewMessage 的适当设置,当第一次需要一个信息时,就可以让 Mathematica 从一个文件读入信息内容.