计算
标准计算序列
下面是在计算例如

的表达式的时候,
Mathematica 所采取的步骤. 每当表达式发生改变时,
Mathematica 重新开始计算的过程序列.
- 如果 h 具有属性 Flat,那么压平所有具有头部 h 的嵌套表达式.
- 对形如
的对象采用与 f 相关联的内置变换规则.
- 采用对
或者
定义的适当的变换规则.
- 采用
或者
的内置变换规则.
非标准变量计算
有大量
Mathematica 内置函数用特殊方式计算变量. 控制结构
While 就是一个例子. 符号
While 具有属性
HoldAll. 于是,
While 的变量不作为标准计算过程的一部分进行计算. 相反地,
While 的内部代码采用特殊方式计算变量. 在
While 的情况下,代码重复计算变量,以完成一个循环.
用特殊方式计算变量的内置函数.
逻辑操作
在形如

的表达式中,

依次计算. 一旦发现任何

等于
False,计算就停止,并且返回结果
False. 这意味着用户可以使用

来表示程序中的不同"分支",只有当满足某些条件的时候,才计算一个特定的分支.
Or 函数与
And 相似;一旦它找到值为
True 的变量,就返回
True. 另一方面,
Xor 总是计算所有的变量.
迭代函数
迭代函数如
Do
的计算过程如下:
- 计算
和
的极值.
- 通过使用 Block,把迭代变量
的值设为局部值.
和
用来决定对迭代变量 i 所赋的值的序列.
- 迭代变量被连续设为每个值,并且在每个情况下计算 f.
如果有若干个迭代变量,对每个变量和所有之前的变量值依次使用相同的过程处理.
除非特别指明,否则直到对
i 赋以特定的值才计算
f,并且对每个选定的
i 值进行计算. 使用
Evaluate[f] 可以立即计算
f,而不用在一个特定的值被赋给
i 以后才计算.
赋值
- 如果左边是一个不具有保持不计算属性的函数,则计算函数的变量,但不计算函数本身.
右边被立即计算(

),但是没有延时赋值(

).
出现在赋值左边的形如
HoldPattern[expr] 的任意子表达式没有被计算. 当子表达式用于模式匹配时,虽然它是
expr 而没有
HoldPattern,但是它仍然是匹配的.
重载非标准变量计算
重载变量的保持不计算功能.
通过使用
Evaluate,可以立即计算函数的任意变量,即使该变量通常在之后的函数的控制下计算. 一个异常情况是当函数具有
HoldComplete 属性的时候;在这种情况下,函数的内容不会被修改.
避免计算
Mathematica 提供了各种不同的函数作为封装("wrappers")来避免计算它们所包含的表达式.
避免表达式进行计算的封装(Wrapper).
计算的全局控制
在我们目前讨论过的计算过程中,涉及了两种基本步骤:
- 递归:计算所需的辅助表达式,以找到特定表达式的值.
迭代产生了这样的计算链:其中通过使用各种不同的变换规则,得到连续的表达式.
Trace 把计算链显示为列表,并且显示对应于子列表中的递归的辅助计算.
与辅助计算序列相关联的表达式由
Stack
返回的列表给出,这些辅助计算产生当前正在计算的表达式.
控制表达式计算的全局变量.
退出
通过调用函数
Abort
,或者通过输入合适的中断键,用户可以让
Mathematica 在计算中的任意点退出.
当被要求退出时,
Mathematica 将尽快终止计算. 如果获得的答案是不正确的或者不完整的,那么
Mathematica 返回的不是答案而是
$Aborted.
可以使用
CheckAbort 来捕获退出,并且使用
AbortProtect 获得延迟.