Mathematica 9 is now available

2.6.6 块和局部值

Module 使变量名具有局部性,但有时需要名是全局的,值是局部的,这可以用 Block 来实现.

设置局部值

涉及 x 的一个表达式

x 局部值计算以前的表达式

x 没有全局值

如前一节所述,在 Module[ x , body] 中的变量x总是有一个唯一符号,模块 每次调用时这符号不同,且与全局符号 x 也有区别. Block[ x , body] 中的 x 是一个全局的符号. 这一个块的作用是让 x 有局部值. 当进入这个块时 x 的值在退出该块时恢复,而在块执行时,x 可以取任意值.

给符号 t 设置值 17

模块中的变量有唯一的局部名

在块中变量有全局名,但有局部值

t 在块中给了一个局部值

当块执行结束时,t 恢复了以前的值

Mathematica 的块设置了可以暂时改变值的一种环境. 在块执行过程中用在块 中所定义的变量的当前值计算表达式,不论表达式是该块的一部分或是在 计算中某一处产生的情况都是如此.

这里定义了符号 u 的一个延时值

在块之外计算 u 时,t 的全局值被使用

可以指定 t 的临时值在块中使用

MathematicaBlock 的间接使用在 Do, SumTable 等的递推结构中. 在所有这些 结构中,Mathematica 建立了迭代递推变量的局部值.

Sum 自动使递推变量 t 是局部值

在递推结构中的局部变量比在 Block 中的更一般一些,它们处理 a[1], 纯符号等变量

Mathematica 中定义函数时,用不直接给出变量但不能影响函数的全局变量方便的. 例如,Mathematica 有一个全局变量 $RecursionLimit,它影响所有函数的计算但又 不直接是函数的变量. 通常 Mathematica 将所定义的全局变量的值保持到明显 的改变了它为止,但也需要仅在一个计算过程中或某一项的计算中有效的值, 这可以通过把它设置为 Mathematica 块的局部值来实现.

定义依赖于全局变量 t 的函数

这里使用了 t 的全局值

在块内可以设置 t 的局部值

全局变量不仅可以用来设置函数的参数,还可以积累从函数得到的结果. 在块中设置这样的局部变量,可以积累在这个块执行过程中从所调用 函数得到的结果.

此函数增加了全局变量 t,返回的是 t 的当前值

如果不用块,计算 h[a] 时改变全局变量 t 的值

使用了块后,仅局部变量 t 被影响

全局变量 t 的值没有改变

当输入 Block[ x , body] 时,x 的所有值被删除,这意味着在这个块内可以把 x 当符号变量来处理. 但从块明确地返回了x 以后,x 就被在块外计算时产生的值 所代替.

当输入块时 t 的值被删除

当返回含有t的表达式时,它就用 t 的全局值进行计算



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.