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

2.5.4 标准运算过程

本节描述 Mathematica 计算表达式的标准过程,该过程适用于大部分表达式. 但用来表示 Mathematica 程序和控制结构等一些类型的表达式不按标准方式 处理,这些将在下节讨论.
在标准计算过程中,Mathematica 先计算表达式的头部,然后再计算表达式 的元素,这些元素本身也是表达式,其计算过程也是这样递推地进行.

3 个 Print 函数逐个处理,打印出它们的变量,返回值为 Null

把符号 ps 设置为 Plus

光处理头部 ps,所以这个表达式就是求几项之和

Mathematica 处理完一个表达式的头部以后,它就判断该头部是否是具有 一定属性的符号.如果该符号具有 Orderless, FlatListable 属性,则在 处理完表达式的元素后 Mathematica 立即进行与这些属性有关的变换.
标准计算过程的下一步就是用 Mathematica 已知的定义对表达式进行计算, Mathematica 先使用用户给出的定义,如果没有合适的用户定义可用, Mathematica 就试用内部的定义. 当 Mathematica 找到一个可用的定义后,它就对 表达式进行相应的变换.其结果仍然是一个表达式,这个表达式再按 标准计算过程进行处理.

标准计算过程

2.5.1 节所述,Mathematica 遵循的原则是将一个表达式一直计算到没有定义可 用为止,这意味着 Mathematica 反复进行计算直到结果不再变化为止. 下面是一个显示标准计算过程的例子,其中我们取 a=7.

Mathematica计算的一个简单例子

Mathematica 提供了跟踪计算过程的一些方法. 函数 Trace[expr] 给出 了显示计算过程中产生的子表达式的嵌套列表.

首先令 a=7

这里给出了计算过程中所产生的子表达式的嵌套列表

Mathematica 中适合不同定义的顺序是十分重要的. Mathematica 在内部定义 之前使用你所给出的定义,这意味着用户给出的定义超越内部定义.

这表达式用内部定义 ArcSin 计算

可以自己给出 ArcSin 的定义,但必须先清除保护属性

在内部定义之前使用了刚给出的定义

2.4.10 节的讨论知道,可以把符号与定义通过上值或下值联系起来, Mathematica 在下值之前试用上值,对表达式 Mathematica 在与 有关的定义.这一顺序遵循特殊定义在一般定义之前使用的原则. 通过在与函数有关的下值之前使用与变量有关的上值,Mathematica 允许 定义一些能超越一般函数的特殊变量.

这里定义了 f[g[x_]] f 有关的一个规则

这里定义了 f[g[x_]] g 有关的一个规则

g 有关的规则先于与 f 有关的规则而使用

删除了与g有关的规则后,就使用与f有关的规则

定义使用的顺序

Plus 等大部分 Mathematica 的内部函数有下值,一些 Mathematica 的内部对象也有上值. 例如,表示幂级数的 SeriesData 对各种数学运算有内部定义的上值.  等表达式在 Mathematica 的标准运算过程中试用的 所有定义的顺序为

• 用户给出的与 有关的定义;
 有关的内部定义;
• 用户给出的与 有关的定义
 有关的内部定义

上值在下值前使用在许多情况下是很重要的.在定义一个复合运算时, 可以定义复合对象的上值,一旦这些对象出现,上值就被使用. 也可以对这个 复合给出一个过程,这个过程在没有出现特定对象的情况下使用. 对这一 过程可以定义下值,因为下值在上值之后使用,所以仅当所有对象都没有 上值时才使用此过程.

q 有关的对象的复合

comp 有关的复合的一般规则

给出两个对象 q 时,与 q 有关的规则就被使用

给出两个 r 对象时,与 comp 有关的一般规则就被使用

在一个表达式中一般会有几个对象具有上值,Mathematica 先检查表达式的头部, 并试用与它有关的上值,随后检查表达式的每个元素,试用其上值. Mathematica 先对用户定义的上值,再对内部定义的上值实施这一过程.在 一系列元素中,先出现元素的上值优先于晚出现元素的上值.

定义 p 关于 c 的上值

定义 q 的值

使用哪一个上值依赖于 c 中哪一个变量先出现